例如,我在一个ToggleGroup中有四个RadioButton,它们的整数值为0、1、2、3。当用户单击一个单选按钮时,我想获取它的值。
我想使用解决方案来获取该值以用作List的索引。
例如: 用户单击第三个单选按钮。该RadioButton的值必须为2。
如果还有其他方法可以为radioButton分配重要的值,我会很高兴听到它。谢谢
答案 0 :(得分:3)
您实际上有几个选项,选择哪个取决于您所需的功能。我将在下面显示每个选项的代码。
toggleGroup.getToggles()
列表-这已经为ObservableList<Toggle>
UserData
添加一个RadioButton
属性RadioButton
-这将允许添加任意数量的属性,类似于选项2,但代码更简洁(我认为)RadioButton
的索引的自己的属性 使用
toggleGroup.getToggles()
列表
如果要将每个RadioButton添加到ToggleGroup,则它们已经在列表中。您可以使用toggleGroup.getToggles()访问该列表。然后,您只需在列表中获取它们的索引。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple interface
VBox root = new VBox(10);
root.setPadding(new Insets(10));
root.setAlignment(Pos.CENTER);
// Create the ToggleGroup
ToggleGroup group = new ToggleGroup();
// Add some RadioButtons to the group
group.getToggles().addAll(
new RadioButton("One"),
new RadioButton("Two"),
new RadioButton("Three"),
new RadioButton("Four"),
new RadioButton("Five")
);
// Add all the RadioButtons to the scene
for (Toggle radioButton : group.getToggles()) {
root.getChildren().add((RadioButton) radioButton);
}
// Now we can get the index any time a RadioButton is selected
group.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) {
System.out.println("Index #" + group.getToggles().indexOf(newValue) + " selected!");
}
});
// Show the Stage
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
向每个
添加一个UserData
RadioButton
属性
由于RadioButton
是Node
,因此它继承了称为[setUserData()][1]
的有用的便捷方法。这使您可以向Object
添加单个Node
属性,以供以后检索。
如果只有一个要添加的值,这是一个可行的选择,使用起来非常简单。对于每个RadioButton
,只需调用方法并将其传递给Object
:
rdo1.setUserData(1);
rdo2.setUserData(2);
rdo3.setUserData(3);
rdo4.setUserData(4);
rdo5.setUserData(5);
稍后可以通过调用getUserData()
方法来检索该值。
当然,这里的危险是它不是真正的类型安全的。由于您可以将任何Java Object
传递给此方法(并且将返回Object
),因此您需要严格控制此处设置的内容,并在检索它时将其正确转换:
int radio1Value = (int) rdo1.getUserData();
创建自己的
RadioButton
但是,如果您希望能够为每个RadioButton
手动分配一个属性值,并且可能包含多个自定义值,则可以简单地创建一个扩展RadioButton
并提供其他属性:
class MyRadioButton extends RadioButton {
private int myIndex;
public MyRadioButton(String text, int myIndex) {
super(text);
this.myIndex = myIndex;
}
public int getMyIndex() {
return myIndex;
}
public void setMyIndex(int myIndex) {
this.myIndex = myIndex;
}
}
创建绑定到所选RadioButton索引的自己的属性
同样,如果您只想跟踪所选RadioButton
的索引,则可以创建一个IntegerProperty
并将其绑定到{{1} }}选择更改。
IntegerBinding
此时,您只需向新属性添加RadioButton
:
// Create a property to hold the index value of the currently selected RadioButton
IntegerBinding selectedRadioButtonIndexBinding = Bindings.createIntegerBinding(() ->
group.getToggles().indexOf(group.getSelectedToggle()), group.getToggles(), group.selectedToggleProperty());
IntegerProperty selectedRadioButtonIndex = new SimpleIntegerProperty();
selectedRadioButtonIndex.bind(selectedRadioButtonIndexBinding);