2014-10-18 438 views
0

我想设置一个变量值,当我在MenuButton对象中选择一个MenuItem。 我试图寻找这个,但我已经空手而归。JavaFX FXML菜单项操作

这里设置的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); 
} 

我不知道如何编写代码从一个菜单项或在scenebuilder字段中的文本的方法应该是在

回答

0

目前还不清楚你的要求是什么,但我假设你想知道单击菜单项的文本。为此,您需要在菜单项上添加一个事件处理程序。从JavaDoc中剪辑的文本菜单如下:

MenuItem item1 = new MenuItem("About"); 
item1.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent e) { 
     System.out.println("About"); 
    } 
}); 

您可以获得事件源,投中菜单项,然后得到的文本。

尽管如此,您的代码存在真正的问题。您在getTemplates中调用了外部数据库,并且它以@FXML元素的形式实现,几乎可以保证它将在FXAT上运行,这真的很糟糕。

我想重构,以便数据库访问在任务中,然后MenuItem创建是任务的onSucceeded事件的处理程序。然后你需要实例化一个ContextMenu并在其中安装MenuItem。

应将getTemplates()方法作为按钮的onAction事件进行调用。

+0

谢谢你,我认为这个动作在我调用它时会被设置和调用,而不是在它被调用之前设置。 – Jocke 2014-10-21 20:54:44