Полностью настроенные окна JavaFX? - программирование
Подтвердить что ты не робот

Полностью настроенные окна JavaFX?

Я хотел бы иметь приложение, в котором я полностью настраивал внешний вид окна. До сих пор я узнал, что я могу удалить типичный материал окна с помощью:

class Application extends javafx.application.Application {
  /**
   * Starts the application.
   *
   * @param stage
   */
  override def start(stage: Stage) {
    stage.initStyle(StageStyle.TRANSPARENT)

    // Load the main window view.
    val loader = new FXMLLoader()
    loader.setLocation(getClass.getResource("/com/myproj/application/MainWindow.fxml"))

    val root = loader.load().asInstanceOf[Parent]
    val scene: Scene = new Scene(root, Color.TRANSPARENT)

    stage.setScene(scene)
    stage.show()
  }
}

Все остальное отлично работает, за исключением того, что перетаскивание окна, двойное нажатие на максимальный размер, перетаскивание на верхний край экрана в Windows должно быть максимально активным и т.д. Возможности родного окна полностью отсутствуют.

Могу ли я как-то довольно легко настроить весь вид окна, не теряя при этом все эти приятные возможности.

Я говорю о чем-то вроде Adobe Photoshop, который выглядит совершенно по-другому, но сохраняет эти функции (или реализует их поверх своего пользовательского интерфейса вручную).

Это было бы началом, если бы я мог по крайней мере реализовать перетаскивание + кнопки окна для стартеров. Здесь я нацелен на Linux, Mac и Windows.

4b9b3361

Ответ 1

См. вид и оформление настраиваемого окна в приложение ансамблевого образца, которое включает исходный код. Загрузите источник, создайте его и запустите его как отдельное приложение, а не встроенное в браузер. Это не будет то, о чем вы просите, потому что такие вещи, как перетаскивание на верхний край экрана, чтобы активировать максимизацию, не будут работать, я думаю, но это должно быть очень близко, и вы всегда можете что-то кодировать, когда его тянули около верхнего края. Окно Ensemble имеет такие функции, как пользовательские изменения размера, минимизация, максимизация, закрытие значков, область в верхней части окна, которую вы можете использовать для перетаскивания окна или двойного щелчка, чтобы максимизировать или минимизировать окно - то есть большинство стандартных функций, которые вы будет ожидать от системы оконного оформления рабочего стола.

Чтобы получить что-то еще ближе к тому, что вы просите, возможно, вы могли бы что-то взломать, создав два окна. Один, стандартное оформленное окно сцены, которое включает в себя границы экрана, а другое - незадекларированный или прозрачный дочерний этап, который всегда отображается поверх главного окна и накладывает границы главного окна с помощью индивидуального рендеринга. Я думаю, вы можете столкнуться с трудностями, пытаясь реализовать этот подход, поэтому я бы не рекомендовал его.

Вам может понравиться попробовать стиль UNDECORATED stage, а не TRANSPARENT, и посмотреть, не улучшилась ли ваша встроенная интеграция с Windows.

В настоящее время для JavaFX имеется некоторый открытый запрос функции, который будет поставляться с JDK8, Windows: поддержка эффектов Aero Glass для окон верхнего уровня, Mac: поддержка NSTexturedBackgroundWindowMask для окон и Создан сплошной белый фон в сцене должен быть создан - при необходимости - в Scenegraph, который, когда он будет реализован, скорее всего поможет вам достичь вашей цели - проголосуйте за них, если такие функции важны для вас.

Ensemble Sample Application

Также проверьте VFXWindows, которая представляет собой среду с открытым исходным кодом для JavaFX.

Обновить

Также связан проект Undecorator, который позволяет вам легко создавать стадию JavaFX со стандартным уменьшением/максимизацией/закрытием/изменением размера хром элементы управления, которые отображаются с помощью механизма JavaFX, а не системы оконной ОС. Это позволяет вам достичь определенного пользовательского контроля над рендерингом окна, которое отображает приложение, такое как Ensemble.