2014-10-18 241 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