JavaFX FXML 菜单项操作
Posted
技术标签:
【中文标题】JavaFX FXML 菜单项操作【英文标题】:JavaFX FXML menuItem action 【发布时间】:2014-10-18 09:42:40 【问题描述】:当我在 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 中的哪个字段中。
【问题讨论】:
【参考方案1】:不清楚您的要求是什么,但我假设您想知道单击菜单项时的文本。为此,您需要在菜单项上添加一个事件处理程序。以下内容摘自 ContextMenu 的 JavaDoc:
MenuItem item1 = new MenuItem("About");
item1.setOnAction(new EventHandler<ActionEvent>()
public void handle(ActionEvent e)
System.out.println("About");
);
您可以获取事件源,将其转换为 MenuItem,然后从中获取文本。
不过,您的代码编写方式确实存在问题。您在 getTemplates 中调用了一个外部数据库,因为它被实现为一个 @FXML 元素,几乎可以保证它将在 FXAT 上运行,这非常非常糟糕。
我将对其进行重构,以便数据库访问位于任务中,然后 MenuItem 创建是任务的 onSucceeded 事件的处理程序。然后您需要实例化一个 ContextMenu 并在该事件处理程序中安装 MenuItem。
getTemplates() 方法应作为按钮的 onAction 事件调用。
【讨论】:
谢谢,我以为action会在调用的时候设置并调用,而不是在调用之前设置。以上是关于JavaFX FXML 菜单项操作的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX:如何从 MenuItem 更改场景 (FXML)