2016-02-27 74 views
1

我有大約10個按鈕將被髮送到相同的方法。我希望該方法能夠識別來源。所以方法知道按鈕「完成」已經引發了這個功能。然後,我可以添加if語句的開關盒來相應地處理它們。這是我曾嘗試ActionEvent獲取按鈕的來源JavaFX

//Call: 
    btnDone.setOnAction(e -> test(e)); 


    public void test(ActionEvent e) { 
     System.out.println("Action 1: " + e.getTarget()); 
     System.out.println("Action 2: " + e.getSource()); 
     System.out.println("Action 3: " + e.getEventType()); 
     System.out.println("Action 4: " + e.getClass()); 
    } 

輸出結果:

Action 1: [email protected][styleClass=button]'Done' 
Action 2: [email protected][styleClass=button]'Done' 
Action 3: ACTION 
Action 4: class javafx.event.ActionEvent 

做的是按鈕上的文字。正如你所看到的,我可以使用e.getTarget()和/或e.getSource()然後我必須對它進行子串處理,所以只有「完成」出現。有沒有其他方法可以在撇號中獲取字符串,而不必使用子字符串。

更新:我試過通過按鈕,它的工作原理,但我仍然想 知道使用ActionEvent的解決方案。

//Call: 
     btnDone.setOnAction(e -> test(btnDone)); 


     public void test(Button e) { 
      System.out.println("Action 1: " + e.getText()); 
     } 

輸出是Action 1: Done

回答

1

通常我更喜歡使用用於每個按鈕的不同方法。依賴按鈕中的文本通常是一個非常糟糕的主意(例如,如果要將應用程序國際化,邏輯會發生什麼?)。

如果你真的想在按鈕上的文本(並再次,我要強調的是,你真的不希望這樣做),只需使用一個沮喪的:

String text = ((Button)e.getSource()).getText(); 
+0

我明白了,鑄造它的工作。謝謝,正是我在找的東西。我總是打開學習,所以你更喜歡什麼而不是這個? – CookieMonster

+0

只需爲每個按鈕使用不同的處理程序... –

+0

@CookieMonster:將數據附加到節點的替代方法:['setUserData'](https://docs.oracle.com/javase/8/javafx/api/javafx /scene/Node.html#setUserData-java.lang.Object-)和['getProperties'](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#getProperties - ) – fabian