JavaFX单选按钮
单选按钮通常组合在一起,以便用户进行单选,即用户只能在单选按钮列表中选择一个项目。 例如,当选择鞋子尺寸时,我们通常从列表中选择一个尺寸。
单选按钮只能执行:选择或取消选择。
以下代码显示,当放置在ToggleGroup
中时,只能选择一个RadioButton
。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { HBox root = new HBox(); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle(""); ToggleGroup group = new ToggleGroup(); RadioButton button1 = new RadioButton("select first"); button1.setToggleGroup(group); button1.setSelected(true); RadioButton button2 = new RadioButton("select second"); button2.setToggleGroup(group); root.getChildren().add(button1); root.getChildren().add(button2); scene.setRoot(root); stage.show(); } public static void main(String[] args) { launch(args); } }
上面的代码生成以下结果。
创建单选按钮
javafx.scene.control
包中的RadioButton
类有两个构造函数。
要为其标签创建一个带有空字符串的单选按钮,然后再设置标签。
RadioButton rb = new RadioButton(); //setting a text label rb.setText("Size 9");
要创建具有指定标签的单选按钮。
RadioButton rb2 = new RadioButton("Size 9");
setSelected()
方法带有true
参数可以显式选择单选按钮。isSelected()
方法返回用户是否选择了特定单选按钮。setGraphic()
方法可以为RadioButton
安装一个图像。
Image image = new Image(getClass().getResourceAsStream("Size.jpg")); RadioButton rb = new RadioButton("Size 9"); rb.setGraphic(new ImageView(image));
单选按钮组
单选按钮通常在组中使用。
我们可以添加单选按钮到ToggleGroup
对象,它将管理它们,使得一次只能选择一个单选按钮。
以下代码创建一个切换组和三个单选按钮,然后将每个单选按钮添加到切换组,并指定应选择哪个按钮。
ToggleGroup group = new ToggleGroup(); RadioButton rb1 = new RadioButton("Size 9"); rb1.setToggleGroup(group); rb1.setSelected(true); RadioButton rb2 = new RadioButton("Size 10"); rb2.setToggleGroup(group); RadioButton rb3 = new RadioButton("Size 11"); rb3.setToggleGroup(group);
单选按钮事件
我们通过ToggleGroup
处理单选按钮选择的事件。更改侦听器添加到ToggleGroup
。为每个单选按钮分配了用户数据。ChangeListener
对象检查组中的选定项目。 所选单选按钮从getSelectedToggle
方法返回。然后通过调用getUserData
方法获取用户数据。
rb1.setUserData("Home") rb2.setUserData("Calendar"); rb3.setUserData("Contacts"); final ToggleGroup group = new ToggleGroup(); group.selectedToggleProperty().addListener( (ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) -> { if (group.getSelectedToggle() != null) { System.out.println(group.getSelectedToggle().getUserData().toString()); } } });
完整的源代码,如下所示 -
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; // at W W W.Y iI bAI.C OM public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = new Scene(new Group()); stage.setWidth(250); stage.setHeight(150); final ToggleGroup group = new ToggleGroup(); RadioButton rb1 = new RadioButton("A"); rb1.setToggleGroup(group); rb1.setUserData("A"); RadioButton rb2 = new RadioButton("B"); rb2.setToggleGroup(group); rb2.setUserData("B"); RadioButton rb3 = new RadioButton("C"); rb3.setToggleGroup(group); rb3.setUserData("C"); 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()); } } }); HBox hbox = new HBox(); VBox vbox = new VBox(); vbox.getChildren().add(rb1); vbox.getChildren().add(rb2); vbox.getChildren().add(rb3); vbox.setSpacing(10); hbox.getChildren().add(vbox); hbox.setSpacing(50); hbox.setPadding(new Insets(20, 10, 10, 20)); ((Group) scene.getRoot()).getChildren().add(hbox); stage.setScene(scene); stage.show(); } }
上面代码执行结果如下所示 -
单选按钮焦点
在单选按钮组中,默认情况下第一个按钮最初具有焦点。
当使用setSelected
方法选择单选按钮时,还应该使用requestFocus
函数将焦点更改为所选单选按钮。
rb.setSelected(true); rb.requestFocus();
上一篇:JavaFX按钮
下一篇:JavaFX切换按钮
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王