当前位置: 首页 > 知识库问答 >
问题:

在JavaFX控制器中获取单击对象id的更好方法

郏兴贤
2023-03-14

我正在寻找一种更好的方法来获取这个对象的事件处理程序中被单击对象的id。

我已经找到了:

javafx将fx:id传递给fxml onAction方法中的控制器或参数

但那对我不起作用。

现在,我使用node类的getId()函数,如下所示:

Button btn = (Button) event.getSource();
String id = btn.getId();

但我不想只对按钮使用这种方法

共有2个答案

贾建茗
2023-03-14

我使用它来获取共享相同事件代码的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方法分配给“鼠标按下时”事件,然后运行代码并随机单击三个不同的ImageView对象:

完整字符串:ImageView[id=iv1, styleClass=image-view]只有id:iv1
完整字符串:ImageView[id=iv4, styleClass=image-view]只有id:iv4
完整字符串:ImageView[id=iv6, styleClass=image-view]只有id:iv6

我希望这对某人有所帮助。:-)

南门星河
2023-03-14

由于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());
        }
    }
}
 类似资料:
  • 如何获得对我的控制器类的引用? 这是我的代码片段。 Controller类在FXML中的fx:控制器属性中指定。实例在后台自动创建。我需要访问该实例才能在表单中设置初始值。 我知道我可以用XML设置初始值,但我需要在运行时设置它们。

  • 使用JavaFX和Scene Builder,我试图从控制器访问标签内的文本。 我在控制器中初始化了一个标签,如下所示: fxml文件中包含以下代码: 我已使用场景生成器将标签绑定到控制器中的此函数: 我的想法是调用类似label1的东西。getText()。但为此,我需要获得标签的fx:id,而且由于我需要许多标签,所以我无法单独硬编码所有id案例。 在JavaFX控制器中获取单击对象id的更好

  • 本文向大家介绍jQuery获取单击节点对象的方法,包括了jQuery获取单击节点对象的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery获取单击节点对象的方法。分享给大家供大家参考,具体如下: event.target属性: 解释: 其中event.target 即为触发单击事件的对象 (有可能是容器内部的某个控件) PS:这里再为大家推荐几款代码格式化、美化工具,相信大家在

  • 我对控制器对象有点困惑。据我所知,默认情况下,控制器是单例的。singleton是如何为web应用程序工作的,如下面的代码中所示,如果线程1执行到第9行,empId为12,线程2从线程1获得控制,empId为23,并完成整个方法的执行,那么当线程1再次执行时,empId的值将是12或23。 我还注意到,UserServiceDao类只创建了一个对象,所以在spring mvc中线程是如何管理的,每

  • 目标是打印标签的当前文本。标签在整个程序中不断变化,使用当前的方法,我只能检索标签的初始化值。 我用来检索控制器实例的内容: