このオブジェクトのイベントハンドラー内でクリックされたオブジェクトのIDを取得するためのより良い方法を探しています。
私はすでにこれを見つけました:
javafxはfx:idをコントローラーまたはfxml onActionメソッドのパラメーターに渡します
しかし、それは私にはうまくいきませんでした。
今、私は次のようにノードクラスのgetId()関数を使用しています:
Button btn = (Button) event.getSource();
String id = btn.getId();
しかし、私はボタンだけでなくこの方法を使いたいです。
Fx:idはFXMLとControllerの間でコントロールをバインドするために使用されるため、この回答は、OPがクリックされたときにコントロールのid
を必要とすることを考慮に入れています。
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class IdForControlsOnClick extends Application{
@Override
public void start(Stage stage) throws Exception {
BorderPane borderPane = new BorderPane();
VBox vBox = new VBox(20);
borderPane.setCenter(vBox);
Button button = new Button("Hi");
button.setId("Button");
Label label = new Label("Label");
label.setId("Label");
CheckBox checkBox = new CheckBox();
checkBox.setId("CheckBox");
button.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler());
label.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler());
checkBox.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler());
vBox.getChildren().addAll(button, label, checkBox);
Scene scene = new Scene(borderPane, 200, 200);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private class MyEventHandler implements EventHandler<Event>{
@Override
public void handle(Event evt) {
System.out.println(((Control)evt.getSource()).getId());
}
}
}
これを使用して、すべて同じイベントコードを共有するImageViewオブジェクトのIDを取得します。 MouseEventを使用した簡単な例を次に示します。
@FXML
private void selectImage(MouseEvent event)
{
String source1 = event.getSource().toString(); //yields complete string
String source2 = event.getPickResult().getIntersectedNode().getId(); //returns JUST the id of the object that was clicked
System.out.println("Full String: " + source1);
System.out.println("Just the id: " + source2);
System.out.println(" " + source2);
}
これが私の状況での出力です。SceneBuilderを使用してselectImageメソッドを「OnMousePressed」イベントに割り当て、コードを実行して3つの異なるImageViewオブジェクトをランダムにクリックしました。
Full String: ImageView[id=iv1, styleClass=image-view] Just the id: iv1
Full String: ImageView[id=iv4, styleClass=image-view] Just the id: iv4
Full String: ImageView[id=iv6, styleClass=image-view] Just the id: iv6
これが誰かに役立つことを願っています。 :-)