我在MenuButton对象中选择的MenuItem时尝试设置变量值。 我试图搜索这个,但我空手而归。
以下是设置MenuItems的代码:
private ObservableList<MenuItem> templateMenuItems = FXCollections.observableArrayList();
@FXML private MenuButton menu = new MenuButton();
@FXML
protected void getTemplates() throws IOException {
CaspReturn tls = this.socket.runCmd(new Tls(""));
String tlsList = tls.getResponse();
String[] tlsListSplitt = tlsList.split("\\n");
for (int i = 0; i < tlsListSplitt.length; i++) {
String[] tlsLine = tlsListSplitt[i].split("\"");
this.templateMenuItems.add(new MenuItem(tlsLine[1]));
}
this.menu.getItems().setAll(this.templateMenuItems);
}
我不确定如何编写代码来获取menuItem中的文本或方法应该在scenebuilder中的哪个字段。
答案 0 :(得分:0)
目前还不清楚你的要求是什么,但我会假设你想知道点击它时菜单项的文字。为此,您需要在菜单项上添加事件处理程序。以下内容是从JavaDoc for ContextMenu剪切的:
MenuItem item1 = new MenuItem("About");
item1.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
System.out.println("About");
}
});
您可以获取事件源,转换为MenuItem,然后从中获取文本。
但是,代码的编写方式确实存在问题。你可以在getTemplates中调用外部数据库,因为它实现为@FXML元素,几乎可以保证它将在FXAT上运行,这真的非常糟糕。
我会重构这一点,以便数据库访问在Task中,然后MenuItem创建是Task的onSucceeded事件的处理程序。然后,您需要实例化ContextMenu并在该事件处理程序中安装MenuItem。
应该将getTemplates()方法作为按钮的onAction事件调用。