質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

Q&A

解決済

2回答

697閲覧

【JavaFX】FXMLで初期状態に存在しないアイテムを定義する方法

kntan695

総合スコア6

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

0グッド

0クリップ

投稿2020/04/07 13:57

###質問内容
初期表示では存在しないアイテムをFXMLで定義することは可能でしょうか。

###質問の経緯
現在はアプリを起動した際に最初に表示される画面をFXMLで定義して開発しようとしています。
その中で、「ある動作を行うとボタンAが表示される」といった実装を行いたいです。
この場合、ボタンAについてプログラム内で見た目やイベントを定義することはできると思うのですが
可能ならFXMLで定義したいと考えております。

初期表示アイテム:FXMLで定義
初期表示では存在しないアイテム:プログラム内で定義

だとアイテムの管理が2箇所に分離されてしまうのが気になります。

一般的にJavaFXを使用したアプリケーションでは初期表示にないアイテムの定義はどのように行っているのか
参考にさせていただきたく、質問いたしました。

可能であれば、サンプルを添えていただけると嬉しいです。

知見をお持ちでしたら、ご回答いただけますと幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

fxmlは使いませんが、やることは一緒です。簡単なサンプルを。

java

1package aa; 2 3import javafx.application.Application; 4import javafx.beans.binding.Bindings; 5import javafx.scene.Scene; 6import javafx.scene.control.Button; 7import javafx.scene.control.CheckBox; 8import javafx.scene.control.TextField; 9import javafx.scene.layout.HBox; 10import javafx.scene.layout.VBox; 11import javafx.stage.Stage; 12 13public class xxHoge { 14 public static void main(final String[] args) throws Exception { 15 Application.launch(App.class, args); 16 } 17 18 public static class App extends Application { 19 @Override 20 public void start(final Stage stage) throws Exception { 21 final VBox vbox = new VBox(); 22 { 23 final CheckBox cb = new CheckBox(); 24 final Button ok = new Button("OK"); 25 final Button ng = new Button("NG"); 26 ok.visibleProperty().bind(cb.selectedProperty()); 27 ng.visibleProperty().bind(Bindings.not(cb.selectedProperty())); 28 vbox.getChildren().add(new HBox(cb, ok, ng)); 29 } 30 { 31 final TextField text = new TextField(); 32 final Button save = new Button("SAVE"); 33 save.disableProperty().bind(Bindings.isEmpty(text.textProperty())); 34 vbox.getChildren().add(new HBox(text, save)); 35 } 36 stage.setScene(new Scene(vbox)); 37 stage.show(); 38 } 39 } 40}

投稿2020/04/08 12:46

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「存在しない」、をどう捉えるかですが、見えなければ操作もできないので、visibleProperty()でどうにかする、かな。

getChildren()に子ノードのremove()/add()/set()する手もあると思いますが、フォーカス移動や戻す位置のことを考えると結構面倒くさそうなので、わたしならやっぱりvisibleProperty()かな。

追記します。

「ある操作をしたときにボタンが」というはなしなので、そこでいきなりボタンが出てくるよりは、ある操作をしたときにボタンが無効状態から有効状態に変わるほうが自然な気もします。disableProperty()

投稿2020/04/07 14:21

編集2020/04/07 14:35
shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kntan695

2020/04/08 11:26

回答ありがとうございます! 参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問