获取JavaFX控制器中单击的Object的id的更好方法

我正在寻找一种更好的方法来获取此对象的事件处理程序中被点击对象的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{ @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方法分配给’On Mouse Pressed’事件,然后运行代码并随机点击三个不同的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

我希望这可以帮助别人。 🙂