2016-12-25 7 views
2

javaFXのGUIに小さな変更を適用する方法がありますか?私は、FXMLをプログラムで行うのではなく、使う方が好きです。javaFXのGUIに最小限の変更を適用する方法

例:アプリケーションは、背景とVBox内のいくつかのボタンで起動します(FXMLファイルで定義されているように配置されています)。

ユーザーがボタンを押すと(たとえば、ゲームのボタンの名前が「マルチプレイヤー」)、GUIが次のステップを表示するように変更されなければならないとします。

この例では、ボタンの名前を変更したり、テキストフィールドに置き換えるボタンを追加したり、その他の小さな変更を適用したりすることができます。しかし、GUIの大部分は同じままである。背景、VBox自体、およびいくつかのボタン。

vbox.getChildren().remove(button);vbox.getChildren().add(textField);のようなものを使用してこれらの変更をプログラムで適用する必要がありますか? FXMLを使うのはなぜですか?私は、GUI全体をプログラムで開始する代わりに、開始fxmlシーンをロードしてから、プログラムで変更を適用することができます。

また、これらの変更がFXMLファイル内で行われる別のFXMLファイルから新しいシーンをロードする必要があります。しかし、私は、FXMLLoaderを使って新しいFXMLファイルをロードするのに、自分のアプリケーションが長い時間を必要とし、短時間、白い画面を表示することに気付きました。

FXMLファイルを別のレイヤーに分割する必要があります。 GUI全体を置き換えるのではなく、VBoxを別のVBoxと交換するだけですか?しかし、GUIをどのように構築すればいいのですか?それでもSceneBuilderを使うことはできますか?

おそらくすべての私のやり方が好ましいものではありません。だから私はどのようにして良い目標を達成することができますか?

私の現在のコードを見たい場合は、先にthis threadに投稿しました。

+0

私は最小の個々の構成要素としてのビューを定義し、そしてあなたが説明するもののようなものが発生したときに、互いのビューの一部を入れ替えます。 'MainButtons'と' MultiplayerButtons'コンポーネントがあるとしましょう。メインでマルチプレイヤーbtnをクリックすると、メインとスワップを交換するだけです。 –

+0

ボタンのようにコンポーネントごとに独自のfxmlファイルを作成することをお勧めしますか?それとも私は間違って理解しましたか?そして、それらのファイルから完全なGUIを構築するにはどうしたらいいですか? – Yakuhzi

+0

テキストを変更するには、コントローラを使用するのが好ましい方法です。削除もそこで実行する必要がありますが、もう少し複雑です。 – Mordechai

答えて

1

fxmlにButtonまたはTextFieldを定義する代わりに、コンテナを定義してください(例:Pane)。次に、あなたのコントローラでこのPane内である必要がありますどのような変更:

@FXML 
private Pane flexiblePane; 

private Button myButton = new Button(); 
private TextField myTextField = new TextField(); 


private void displayFlexiblePaneAsButton(boolean flag) { 
    if (flag) { 
     flexiblePane.getChildren().clear(); 
     flexiblePane.getChildren().add(myButton); 
    } 
    else { 
     flexiblePane.getChildren().clear(); 
     flexiblePane.getChildren().add(myTextField); 
    } 
} 
関連する問題