JavaFXでマウスポインタがコントロールの領域内に入ったイベントを登録する方法について記載しています。
ポインタが領域内に入ったイベントを登録する方法
領域内に入ったイベント(MouseEntered)を登録するには、setOnMouseEntered メソッドを使用します。
次の例では、ラベルとテキストフィールドにイベントを登録します。
他のコントロールも同様に設定することができます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import javafx.application.Application; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.input.MouseEvent; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class SampleEntered1 extends Application { @Override public void start(Stage pStage) throws Exception { /** ラベルの定義(イベント表示用) */ Label lblMsg = new Label(); /** ラベルの定義(Enteredイベント用1) */ Label label = new Label("ラベル"); label.setPrefHeight(30); label.setPrefWidth(200); label.setAlignment(Pos.CENTER); label.setStyle("-fx-background-color: skyblue"); // ラベルにイベントを設定 label.setOnMouseEntered( new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { lblMsg.setText("ポインタがラベル領域内に入りました。"); } }); /** テキストフィールドの定義(Enteredイベント用2) */ TextField textField = new TextField(); textField.setPrefHeight(30); textField.setMaxWidth(200); // テキストフィールドにイベントを設定 textField.setOnMouseEntered( new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { lblMsg.setText("ポインタがテキスト領域内に入りました。"); } }); VBox vbox = new VBox(); vbox.setAlignment(Pos.CENTER); // VBox内で中央位置に合わせる vbox.setSpacing(30); // 各コンロール間の垂直方向のスペース vbox.getChildren().addAll( lblMsg, label, textField); pStage.setTitle("Sample MouseEntered"); pStage.setHeight(230); pStage.setWidth(300); pStage.setScene( new Scene( vbox ) ); pStage.show(); } public static void main(String[] args){ Application.launch(args); } } |
上記の例では、イベントの登録に匿名クラスを使用しました。
1 2 3 4 5 6 7 |
// ラベルにイベントを設定 label.setOnMouseEntered( new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { lblMsg.setText("ポインタがラベル領域内に入りました。"); } }); |
次のようにラムダ式を使用することもできます。
1 2 |
// ラベルにイベントを設定 label.setOnMouseEntered( event -> lblMsg.setText("ポインタがラベル領域内に入りました。")); |