javafx
ボタン
サーチ…
アクションリスナーの追加
ボタンがアクティブになるとアクションイベントが発生します(たとえば、クリック、ボタンのキーバインドが押されたなど)。
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
Java 8+を使用している場合は、アクションリスナーにlambdasを使用できます。
button.setOnAction((ActionEvent a) -> System.out.println("Hello, World!"));
// or
button.setOnAction(a -> System.out.println("Hello, World!"));
ボタンにグラフィックを追加する
ボタンはグラフィックを持つことができます。 graphic
は、 ProgressBar
ような任意のJavaFXノードにすることができます
button.setGraphic(new ProgressBar(-1));
ImageView
button.setGraphic(new ImageView("images/icon.png"));
または別のボタン
button.setGraphic(new Button("Nested button"));
ボタンを作成する
Button
作成は簡単です:
Button sampleButton = new Button();
これにより、内部にテキストやグラフィックを含まない新しいButton
が作成されます。
テキスト付きのButton
を作成する場合は、パラメータとしてString
をとるコンストラクタを使用します( Button
textProperty
を設定します)。
Button sampleButton = new Button("Click Me!");
グラフィックを内部または他のNode
内に持つButton
を作成する場合は、次のコンストラクタを使用します。
Button sampleButton = new Button("I have an icon", new ImageView(new Image("icon.png")));
デフォルトおよびキャンセルボタン
Button
APIを使用すると、 Scene
割り当てられたアクセラレータのリストにアクセスしたり、キーイベントを明示的に聴取したりする必要なく、共通のキーボードショートカットをボタンに簡単に割り当てることができます。つまり、 setDefaultButton
とsetCancelButton
2つの便利なメソッドが用意されています。
setDefaultButton
をtrue
設定すると、KeyCode.ENTER
イベントを受け取るたびにButton
がKeyCode.ENTER
ます。setCancelButton
をtrue
設定すると、KeyCode.ESCAPE
イベントを受け取るたびにButton
がsetCancelButton
しtrue
。
次の例では、入力またはエスケープキーが押されたときに、フォーカスされているかどうかに関係なく起動される2つのボタンを持つScene
を作成します。
FlowPane root = new FlowPane();
Button okButton = new Button("OK");
okButton.setDefaultButton(true);
okButton.setOnAction(e -> {
System.out.println("OK clicked.");
});
Button cancelButton = new Button("Cancel");
cancelButton.setCancelButton(true);
cancelButton.setOnAction(e -> {
System.out.println("Cancel clicked.");
});
root.getChildren().addAll(okButton, cancelButton);
Scene scene = new Scene(root);
これらのKeyEvents
が親Node
によって消費された場合、上記のコードは機能しません:
scene.setOnKeyPressed(e -> {
e.consume();
});