web-dev-qa-db-ja.com

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の画面上部のエッジへのドラッグなどを除いて、他のすべては正常に機能します。ネイティブのウィンドウ機能が完全に欠落しています。

これらのNice機能をすべて失うことなく、ウィンドウの外観全体を簡単にカスタマイズできますか?.

私はAdobePhotoshopのように、見た目はまったく異なりますが、これらの機能を保持している(またはUIの上に手動で実装している)ものについて話しています。

少なくとも初心者向けのドラッグ+ウィンドウボタンを実装できれば、それは始まりです。ここではLinux、Mac、Windowsをターゲットにしています。

17
Tower

ソースコードを含む Ensembleサンプルアプリケーション のカスタマイズされたウィンドウの外観と処理を参照してください。 source をダウンロードし、ビルドして、ブラウザに埋め込むのではなく、スタンドアロンアプリケーションとして実行します。画面上部のエッジにドラッグして最大化をアクティブにするなどの機能が機能しないため、正確に要求しているものにはなりませんが、非常に近く、ウィンドウを最大化するものをいつでも自分でコーディングできます。上端近くにドラッグしたとき。 Ensembleウィンドウには、カスタムサイズ変更装飾、最小化、最大化、閉じるアイコン、ウィンドウをドラッグしたり、ダブルクリックしてウィンドウを最大化または最小化するために使用できるウィンドウ上部の領域などの機能があります。デスクトップウィンドウシステムに期待します。

何かをあなたが求めているものにさらに近づけるために、おそらくあなたは2つのウィンドウを作成することによって何かを一緒にハックすることができます。 1つは、画面の境界線を含む標準の装飾されたステージウィンドウで、もう1つは、常にメインウィンドウの上に表示され、メインウィンドウの境界線をカスタムレンダリングでオーバーレイする、装飾されていない、または透明な子ステージです。このアプローチを実装しようとすると問題が発生する可能性があると思うので、あまりお勧めしません。

TRANSPARENTではなくUNDECORATEDステージスタイルを試して、ネイティブWindowsとの統合が改善されるかどうかを確認することをお勧めします。

現在、JavaFXがJDK8に同梱される予定のオープン機能リクエストがいくつかあります。 Windows:トップレベルウィンドウでAero GlassエフェクトをサポートMac:WindowsでNSTexturedBackgroundWindowMaskスタイルをサポート および ステージで作成された白い無地の背景は、必要に応じてシーングラフで作成する必要があります これを実装すると、目標を達成するのに役立つ可能性があります-そのような機能が重要な場合は、投票してください君は。

Ensemble Sample Application

また、チェックアウト VFXWindows これはJavaFXのオープンソースウィンドウフレームワークです。

更新

また、関連する ndecorator プロジェクトでは、標準の最小化/最大化/閉じる/サイズ変更chromeコントロールはJavaFXエンジンを介してレンダリングされます)を使用してJavaFXステージを簡単に作成できますOSウィンドウシステムよりも優れています。これにより、Ensembleなどのアプリケーションが表示するウィンドウレンダリングのカスタム制御を実現できます。

15
jewelsea

this ライブラリを使用できます。これは完全にカスタマイズ可能なJavaFxステージ(CustomStage)です。これでそれを使用する方法の詳細な説明を見ることができます CustomStage Wiki

それは、

  • ウィンドウのサイズ変更
  • デフォルトのアクションボタンとその動作(閉じる、最大化/復元、最小化)
  • ウィンドウのドラッグ
  • 画面の解像度はウィンドウが自動的に拡大縮小されます
  • 非常に敏感
  • スタイラブル(cssとメソッドを介して)
  • 透明性を実現できる
  • ナビゲーションペインと引き出しが組み込まれています
  • 等.
0
Oshan_Mendis