JavaFX FXML menuItem动作

时间:2014-10-18 09:42:41

标签: javafx menuitem fxml

我在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 个答案:

答案 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事件调用。