2017-02-24 37 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