gpt4 book ai didi

JavaFX ContextMenu 如何获取单击的对象?

转载 作者:行者123 更新时间:2023-12-02 21:15:24 35 4
gpt4 key购买 nike

我正在学习javafx.scene.control.ContextMenu,现在我面临一个问题:

如何从EventHandler获取被点击的对象? event.source() 和 event.target() 都返回 MenuItem。

让我用一个例子来解释一下:我应该在函数句柄中写什么?

    TextField text = new TextField();
Label label1 = new Label("hello");
Label label2 = new Label("world");
Label label3 = new Label("java");

ContextMenu menu = new ContextMenu();
MenuItem item = new MenuItem("copy to text field");
menu.getItems().add(item);
item.setOnAction(new EventHandler(){
public void handle(Event event) {
//I want to copy the text of the Label I clicked to TextField
event.consume();
}
});

label1.setContextMenu(menu);
label2.setContextMenu(menu);
label3.setContextMenu(menu);

编辑:我希望有一些简单的解决方案(一个衬垫),但如果没有,那么有很多复杂的方法来做到这一点。

最佳答案

您可以创建自己的 ContextMenu 实例并向其中添加操作父级以供进一步引用:

public class Main extends Application {

TextField text = new TextField();

public static void main(String[] args) {
Application.launch(args);
}

@Override
public void start(Stage primaryStage) {


Label label1 = new Label("hello");
Label label2 = new Label("world");
Label label3 = new Label("java");

label1.setContextMenu(new MyContextMenu(label1));
label2.setContextMenu(new MyContextMenu(label2));
label3.setContextMenu(new MyContextMenu(label3));

HBox root = new HBox();

root.getChildren().addAll(text, label1, label2, label3);

Scene scene = new Scene(root, 300, 100);

primaryStage.setScene(scene);
primaryStage.show();

}

private class MyContextMenu extends ContextMenu {

public MyContextMenu(Label label) {

MenuItem item = new MenuItem("copy to text field");
item.setOnAction(event -> {

// I want to copy the text of the Label I clicked to TextField
text.setText(label.getText());

event.consume();
});

getItems().add(item);

}

}
}

关于JavaFX ContextMenu 如何获取单击的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149098/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com