2017-02-24 33 views
0

我有兩個切換按鈕。JavaFX中的ToggleButtons

  1. 我點擊了btn1 // btn1 is on; btn2關閉
  2. 我點擊btn2 // btn2打開; btn1自動關閉...爲什麼?

有人可以解釋這種行爲並提供解決方案。

我希望所有的切換按鈕都是獨立的。

+0

它與這個問題有關:http://stackoverflow.com/questions/42413313/togglebuttons-and-listeners-in-javafx。答案是我對這個答案的最後一個評論:http://stackoverflow.com/questions/42413313/togglebuttons-and-listeners-in-javafx/42413452#42413452:因爲'ToggleGroup'。 – DVarga

+0

你能轉發一些關於如何獨立聽按鈕切換動作的鏈接嗎? –

回答

1

正如我提到的,如果你不把ToggleButton s轉換爲ToggleGroup你可以聽分開切換的selectedProperty

ToggleButton tb1 = new ToggleButton("ToggleButton1"); 
ToggleButton tb2 = new ToggleButton("ToggleButton2"); 

tb1.selectedProperty().addListener(((observable, oldValue, newValue) -> { 
    System.out.println(tb1.getText() + " changed from " + oldValue + " to " + newValue); 
    System.out.println("Taking a nap!"); 
})); 

tb2.selectedProperty().addListener(((observable, oldValue, newValue) -> { 
    System.out.println(tb2.getText() + " changed from " +oldValue + " to " + newValue); 
    System.out.println("Working hard!"); 
})); 

更新:,你也可以使用onActionProperty

for (int i = 0; i< 20; i++) { 
    ToggleButton tb = new ToggleButton("ToggleButton"+i); 
    tb.setUserData("UserData"+i); 
    tb.setOnAction(e -> { 
     System.out.println(tb.getText() + " - Selected: " + tb.isSelected() 
      + "; UserData: " + tb.getUserData()); 
    }); 
} 
+0

但是,我不能讓偵聽器通用,並使用其中的按鈕userdata。我必須爲每個按鈕執行此操作。我有多達20個按鈕。 –

+0

假設我讓偵聽器是通用的..那麼如何讓它知道哪個按鈕被點擊了,哪個userData用於進一步的動作。 –

+0

爲您更新了答案。 – DVarga