如何从 ToggleGroup 中获取选定的单选按钮
How to get selected radio button from ToggleGroup
我正在研究 JavaFX 8 和 SceneBuilder
。我在 FXML 文件中创建了一些单选按钮,并在其中为单选按钮列表指定了一个 toggleGroup
名称。所以,现在我想在我的控制器中获取 toggleGroup
的选定单选按钮,我是否需要再次将所有单选按钮作为控制器中的字段,或者只是 toggleGroup
对象会得到我选定的单选按钮(仅该单选按钮的文本,而不是按钮对象)。
假设您有一个切换组和属于该组的三个单选按钮。
ToggleGroup group = new ToggleGroup();
RadioButton rb1 = new RadioButton("RadioButton1");
rb1.setUserData("RadioButton1");
rb1.setToggleGroup(group);
rb1.setSelected(true);
RadioButton rb2 = new RadioButton("RadioButton2");
rb2.setUserData("RadioButton2");
rb2.setToggleGroup(group);
RadioButton rb3 = new RadioButton("RadioButton3");
rb3.setUserData("RadioButton3");
rb3.setToggleGroup(group);
当您 select 来自该切换组的单选按钮时,将调用以下 changed(...)
方法。
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (group.getSelectedToggle() != null) {
System.out.println(group.getSelectedToggle().getUserData().toString());
// Do something here with the userData of newly selected radioButton
}
}
});
这从来没有得到正确或彻底的回答,所以我想我会 post 我得到的解决方案。
当您在 SceneBuilder
中创建单选按钮时,还可以使用 SceneBuilder
将它们分配给一个组。通过 Controller 访问该组的方法是首先在 Controller 中创建一个 ToggleGroup
类型的变量,并将其命名为与您在 SceneBuilder
中创建的变量完全相同的名称。然后你就可以使用它了。这是我如何做到的伪代码示例:
// your imports
public class Controller
{
@FXML ToggleGroup myGroup; //I called it myGroup in SceneBuilder as well.
public void myGroupAction(ActionEvent action)
{
System.out.println("Toggled: " + myGroup.getSelectedToggle().getUserData().toString());
}
public void initialize()
{
//whatever initialize code you have here
}
}
尽管从 getUserData
属性 返回的文本很长。下面是获取单选按钮名称的方法:
myGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1)
{
RadioButton chk = (RadioButton)t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button
System.out.println("Selected Radio Button - "+chk.getText());
}
});
希望这对以后的人有所帮助...
@FXML
ToggleGroup right; //I called it right in SceneBuilder.
稍后在方法中的某个地方。
RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
public class MyControler {
@FXML
private ToggleGroup myToggleGroup;
@FXML
public void initialize(){
//the simplest way to print current value (text of the selected radio button)
System.out.format("Selected Radio Button: " + ((RadioButton)myToggleGroup.getSelectedToggle()).getText());
//register on change event
myToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> observable, Toggle oldToggle, Toggle newToggle)
{
//print new selected value after change
System.out.println("Selected Radio Button: " + ((RadioButton)newToggle).getText());
}
});
}
//sample method to set radio button (unselect all if group don't contain value)
private void setRadioButtons(ToggleGroup toggleGroup, String value) {
for (Toggle t : toggleGroup.getToggles())
t.setSelected(((RadioButton) t).getText().equals(value));
}
//sample method to set radio button (select existing value or do nothing)
private void setRadioButton(ToggleGroup toggleGroup, String value) {
for (Toggle t : toggleGroup.getToggles())
if(((RadioButton) t).getText().equals(value))
t.setSelected(true);
}
}
我得到的解决方案是:
ToggleGroup toggleGroup = new ToggleGroup();
然后将toggleGroup设置为单选按钮;假设 r1 和 r2
r1.setToggleGroup(toggleGroup);
r2.setToggleGroup(toggleGroup);
toggleGroup.setUserData(toggleGroup.getSelectedToggle().toString());
打印RadioButton的数据:
System.out.println("Selected Radio Button is " + toggleGroup.getUserData().toString());
我正在研究 JavaFX 8 和 SceneBuilder
。我在 FXML 文件中创建了一些单选按钮,并在其中为单选按钮列表指定了一个 toggleGroup
名称。所以,现在我想在我的控制器中获取 toggleGroup
的选定单选按钮,我是否需要再次将所有单选按钮作为控制器中的字段,或者只是 toggleGroup
对象会得到我选定的单选按钮(仅该单选按钮的文本,而不是按钮对象)。
假设您有一个切换组和属于该组的三个单选按钮。
ToggleGroup group = new ToggleGroup();
RadioButton rb1 = new RadioButton("RadioButton1");
rb1.setUserData("RadioButton1");
rb1.setToggleGroup(group);
rb1.setSelected(true);
RadioButton rb2 = new RadioButton("RadioButton2");
rb2.setUserData("RadioButton2");
rb2.setToggleGroup(group);
RadioButton rb3 = new RadioButton("RadioButton3");
rb3.setUserData("RadioButton3");
rb3.setToggleGroup(group);
当您 select 来自该切换组的单选按钮时,将调用以下 changed(...)
方法。
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (group.getSelectedToggle() != null) {
System.out.println(group.getSelectedToggle().getUserData().toString());
// Do something here with the userData of newly selected radioButton
}
}
});
这从来没有得到正确或彻底的回答,所以我想我会 post 我得到的解决方案。
当您在 SceneBuilder
中创建单选按钮时,还可以使用 SceneBuilder
将它们分配给一个组。通过 Controller 访问该组的方法是首先在 Controller 中创建一个 ToggleGroup
类型的变量,并将其命名为与您在 SceneBuilder
中创建的变量完全相同的名称。然后你就可以使用它了。这是我如何做到的伪代码示例:
// your imports
public class Controller
{
@FXML ToggleGroup myGroup; //I called it myGroup in SceneBuilder as well.
public void myGroupAction(ActionEvent action)
{
System.out.println("Toggled: " + myGroup.getSelectedToggle().getUserData().toString());
}
public void initialize()
{
//whatever initialize code you have here
}
}
尽管从 getUserData
属性 返回的文本很长。下面是获取单选按钮名称的方法:
myGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1)
{
RadioButton chk = (RadioButton)t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button
System.out.println("Selected Radio Button - "+chk.getText());
}
});
希望这对以后的人有所帮助...
@FXML
ToggleGroup right; //I called it right in SceneBuilder.
稍后在方法中的某个地方。
RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle();
String toogleGroupValue = selectedRadioButton.getText();
public class MyControler {
@FXML
private ToggleGroup myToggleGroup;
@FXML
public void initialize(){
//the simplest way to print current value (text of the selected radio button)
System.out.format("Selected Radio Button: " + ((RadioButton)myToggleGroup.getSelectedToggle()).getText());
//register on change event
myToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> observable, Toggle oldToggle, Toggle newToggle)
{
//print new selected value after change
System.out.println("Selected Radio Button: " + ((RadioButton)newToggle).getText());
}
});
}
//sample method to set radio button (unselect all if group don't contain value)
private void setRadioButtons(ToggleGroup toggleGroup, String value) {
for (Toggle t : toggleGroup.getToggles())
t.setSelected(((RadioButton) t).getText().equals(value));
}
//sample method to set radio button (select existing value or do nothing)
private void setRadioButton(ToggleGroup toggleGroup, String value) {
for (Toggle t : toggleGroup.getToggles())
if(((RadioButton) t).getText().equals(value))
t.setSelected(true);
}
}
我得到的解决方案是:
ToggleGroup toggleGroup = new ToggleGroup();
然后将toggleGroup设置为单选按钮;假设 r1 和 r2
r1.setToggleGroup(toggleGroup);
r2.setToggleGroup(toggleGroup);
toggleGroup.setUserData(toggleGroup.getSelectedToggle().toString());
打印RadioButton的数据:
System.out.println("Selected Radio Button is " + toggleGroup.getUserData().toString());