序文
JavaFXは、強力なグラフィックスおよびマルチメディア処理ツールキットコレクションであり、開発者はリッチクライアントプログラムを設計、作成、テスト、デバッグ、および展開でき、Javaと同じくらいクロスプラットフォームです。
構成構造
- javaFXの基礎(javaFXシリーズのランチャー:javaFXを起動する2つの方法とlaunch(args [])パラメーターの設定と取得)
- フォーム(javaFX2.0フォーム(ステージ)の分析と使用)
- シーン(javaFX2.0シーン(シーン)の分析と使用)
- レイアウト
- UIコンポーネント
- 2D / 3Dグラフィックスシステム(Windows VistaではDirectX 9.0、Windows7ではDirectX 11.0、MacOS / LinuxではOpenGLを使用)
- マルチメディア(オーディオおよびビデオ)(javaFXシリーズのメディア:javaFXビデオプレーヤーの最も単純な実現)
- 視覚効果
- Webコンポーネント(javaFXシリーズの Webコンポーネント:最も単純なjavaFXブラウザの実装)
- CSSカスケードスタイルシート(CSS2.0および少量のCSS3.0をサポート)
- その他の
- JavaFXスレッド構造分析
フォーム機能
javaFXは、Stageを介したウィンドウのいくつかの制御機能を提供し、ウィンドウサイズの設定、全画面表示、全画面ショートカットキーの設定、フォーカス、トップの維持、表示、非表示などの一般的なウィンドウ機能を提供します。
ステージはJavaFXアプリケーションスレッドでのみ取得および制御できます。javaFXのソースコードを確認したところ、JavaFXがフォームコントロールに対してスレッドチェックを実行していることがわかりました。制御できるのはJavaFXアプリケーションスレッドのみで、他のスレッドはjavaFXのフォームを制御できません。制御して呼び出します。
JavaFXスレッド構造分析、最初の記事を参照してください:javaFX2.0スレッド構造分析
フォームのデモコード
実際にJavaFXを使い始めると、JavaFXのフォームデザインは非常に柔軟性がなく、多くの制限があることがわかります。たとえば、ノードはjavaFXスレッドでのみ作成でき、他のスレッドはフォームステージを操作できません。もちろん、設計者自身の考慮事項もあります。たとえば、公式ドキュメントには、これがjavafxスレッドのフォームへの排他性を確保し、以前のawtのようなスレッドの問題を防ぐためであると記載されています。ただし、ブロガーが一定期間使用した後、問題を解決するためのこのソリューションにはさらに多くの問題があることは明らかであり、明らかに適切ではありません。ウィンドウ制御のための他のスレッドの複雑さが大幅に増大するだけでなく、より複雑なコード構造がここにありますが、紛失する価値はありません。今後のバージョンがさらに最適化されることを期待しています。
パブリッククラスStageDemoはApplication {
double minWidth = 800、minHeight = 600;
static Stageステージ; //フォーム。フォームのAPIを操作する場合は、javaFXアプリケーションスレッドで実行する必要があり、他のスレッドの実行は例外をスローします。
public static Scene scene; // Scene、シーンはフォームStageの初期化後に作成する必要があります。これは、javaFXランチャースレッドとjavaFXアプリケーションスレッドのinit()メソッドでのみ作成できます。他のスレッドは例外をスローします。
String title = "eguidのフォームステージ関数のデモンストレーション。再版のソースと作成者の名前を指定してください、ブログ。eguid。cc元の技術記事";
@Override
public void init()throws Exception { Console.log( "フォームが開かれる前の初期化、現在のスレッド:" + Thread.currentThread()。getName());グループroot = new Group();
scene = new Scene(root、2000,2000、Color.WHITE); //シーンを
super.init(); に入れることはできません
}@Override
public void start(Stage primaryStage)throws Exception { Console.log( "Open form、current thread:" + Thread.currentThread()。getName()); stage = primaryStage; primaryStage.setScene(scene); Console。 log(scene); //ステージ/フォーム primaryStage.setTitle(title); // フォームの最大範囲と最小範囲を設定して、ウィンドウが小さすぎたり大きすぎたりしないようにします。 primaryStage.setMinWidth(minWidth); primaryStage.setMinHeight(minHeight);//現在の画面の最大解像度を取得する、自己実装ツール
int maxWidth = ScreenUtil.getWidth()、maxHeight = ScreenUtil.getHeight();
primaryStage.setMaxWidth(maxWidth); //最大幅を設定
primaryStage.setMaxHeight(maxHeight); / /設定された最大高さ
CONSOLE.LOG( "最大解像度:" +のmaxWidth + "" +のmaxHeight);
//セット出口全画面のショートカットキー
primaryStage.setFullScreenExitKeyCombination(新しいKeyCombination(){ @Override 公共ブールマッチ(たKeyEventイベント){ String name = event.getCode()。getName(); Console.log( "Key name:" + name); return super.match(event); } });
primaryStage.setFullScreen(true); //全画面
primaryStage.setResizable(true); //ウィンドウサイズの無料調整を許可する
primaryStage.setFocused(true); //フォーカスを
primaryStage.setAlwaysOnTop(true); //上に保持する
primaryStage.show(); //表示フォーム
}@Override
public void stop()throws Exception { Console.log( "Close the form、current thread:" + Thread.currentThread()。getName()); super.stop(); }public static void main(String [] args){ Console.log( "启动程序"); Application.launch(args); }
}