举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > javafx单选按钮选中事件 JavaFX 单选按钮

javafx单选按钮选中事件 JavaFX 单选按钮

2023-05-27 17:31 Java教程

javafx单选按钮选中事件 JavaFX 单选按钮

javafx单选按钮选中事件

JavaFX单选按钮选中事件是指当用户点击单选按钮时,会触发一个事件,这个事件可以被应用程序处理。在JavaFX中,可以使用RadioButton类来创建单选按钮。

要处理单选按钮的选中事件,可以使用RadioButton类的setOnAction()方法。该方法接受一个EventHandler对象作为参数,该对象将在单选按钮被选中时被调用。例如:

RadioButton rb = new RadioButton("Option 1"); 
rb.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
        System.out.println("Option 1 selected"); 
    } 
}); 

上面的代码创建了一个名为“Option 1”的单选按钮,并将一个匿名内部类作为其onAction()方法的参数。当用户点击该单选按钮时,将打印“Option 1 selected”字样。

此外,还可以使用ToggleGroup类来创建一组相关的单选按钮。ToggleGroup对象本质上是一个容器(Container),它包含一系列相关的Toggle对象(例如RadioButton对象)。当用户在ToggleGroup中的任何一个Toggle上进行切换时(例如在RadioButton上进行切换时)都会引发SelectionModelChanged事件。

 ToggleGroup group = new ToggleGroup(); 
 RadioButton rb1 = new RadioButton("Option 1"); 
 rb1.setToggleGroup(group); 

 RadioButton rb2 = new RadioButton("Option 2"); 
 rb2.setToggleGroup(group); 

 group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){ 

     @Override   public void changed(ObservableValue<? extends Toggle> ov,   Toggle old_toggle, Toggle new_toggle) {   if (group.getSelectedToggle() != null) {     System.out.println("Selected: " + group.getSelectedToggle().getUserData().toString());   }   } }); 

上面的代码创建了一个名为group的ToggleGroup对象并添加了2个RadioButton对象rb1和rb2。然后将ChangeListener注册到selectedToggleProperty()上。当用户在rb1或rb2上进行切换时就会打印出相应的信息。

JavaFX 单选按钮

JavaFX教程 - 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 RadioButton

创建单选按钮

javafx.scene.control包中的RadioButton类有两个构造函数。

要为其标签创建一个带有空字符串的单选按钮,然后再设置标签。

RadioButton rb = new RadioButton();
//setting a text label
rb.setText("Size 9");

要创建具有指定标签的单选按钮

RadioButton rb2 = new RadioButton("Size 9");

带有true参数的setSelected()方法可以显式选择单选按钮。

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;

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();
  }
}

上面的代码生成以下结果。

JavaFX RadioButton

单选按钮焦点

在单选按钮组中,默认情况下第一个按钮最初具有焦点。

当使用setSelected方法选择单选按钮时,我们还应该使用requestFocus函数将焦点更改为所选单选按钮。

rb.setSelected(true);
rb.requestFocus();
阅读全文
以上是鳄鱼CMS为你收集整理的javafx单选按钮选中事件 JavaFX 单选按钮全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们