📜  JavaFX |切换按钮类

📅  最后修改于: 2022-05-13 01:54:47.204000             🧑  作者: Mango

JavaFX |切换按钮类

ToggleButton 是一个可以被选中的特殊控件。基本上,ToggleButton 的呈现方式与 Button 类似,但这两种是不同类型的控件。 Button 是一个“命令”按钮,单击时会调用一个函数。但是 ToggleButton 是一个带有布尔值的控件,指示它是否被选中。它继承了ButtonBase类。

ToggleButton 也可以成组放置。默认情况下,ToggleButton 不在组中。在组中时,该组中一次只能选择一个 ToggleButton。要将两个 ToggleButtons 放在同一个组中,只需为它们分配相同的 ToggleGroup 值。与 RadioButtons 不同,ToggleGroup 中的 ToggleButtons 不会尝试强制组中至少一个选定的 ToggleButton。意思是,如果一个 ToggleButton 被选中,点击它会导致它被取消选中。使用 RadioButton,单击组中选定的按钮将不起作用。

类的构造函数:

  1. ToggleButton() :创建一个切换按钮,其标签为空字符串。
  2. ToggleButton(String txt) :创建一个以指定文本为标签的切换按钮。
  3. ToggleButton(String txt, Node graphics) :创建一个带有指定文本和图标作为其标签的切换按钮。

常用方法:

MethodDescription
setToggleGroup(ToggleGroup val)Sets the value of the property toggleGroup.
setSelected(boolean val)Sets the value of the property selected.
isSelected()Gets the value of the property selected.
fire()Invoked when a user gesture indicates that an event for this ButtonBase should occur.

下面的程序说明了 ToggleButton 类的使用:

  1. 演示 ToggleButton 类的简单Java程序:在这个程序中,我们试图选择一个人的性别。我们首先创建HBox ,然后为其设置布局。创建一个 ToggleGroup 和名为“ Male ”和“ Female ”的新切换按钮。使用setToggleGroup()方法设置切换组(在一个组中一次只能选择一个按钮)。默认情况下,男性按钮被选中。使用setScene() 方法创建场景并将场景设置为舞台。并启动应用程序。
    // Java program to demonstrate ToggleButton Class
    import javafx.application.Application;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.control.ToggleButton;
    import javafx.scene.control.ToggleGroup;
    import javafx.scene.layout.HBox;
    import javafx.stage.Stage;
      
    public class ToggleButtonExample extends Application {
      
        public void start(Stage stage)
        {
      
            // Hbox layout
            HBox root = new HBox();
            root.setPadding(new Insets(10));
            root.setSpacing(5);
      
            // Gender
            root.getChildren().add(new Label("Your gender:"));
      
            // Creating a ToggleGroup
            ToggleGroup group = new ToggleGroup();
      
            // Creating new Toggle buttons.
            ToggleButton maleButton = new ToggleButton("Male");
            ToggleButton femaleButton = new ToggleButton("Female");
      
            // Set toggle group
            // In a group, maximum only
            // one button is selected
            maleButton.setToggleGroup(group);
            femaleButton.setToggleGroup(group);
      
            maleButton.setUserData("I am a Male");
            femaleButton.setUserData("I am a Female");
      
            // male button is selected at first by default
            maleButton.setSelected(true);
      
            root.getChildren().addAll(maleButton, femaleButton);
      
            // create the scene
            Scene scene = new Scene(root, 450, 300);
      
            stage.setTitle("Toggle Button");
            stage.setScene(scene);
            stage.show();
        }
      
        // Main Method
        public static void main(String[] args)
        {
            launch(args);
        }
    }
    

    输出:

  2. 使用 ChangeListener 演示 ToggleButton 类的Java程序:在这个程序中,我们首先创建一个标签。然后我们将使用ToggleButton()创建切换按钮,并使用ToggleGroup()方法创建切换组。将所有切换按钮添加到切换组。现在为 ToggleGroup 创建一个ChangeListener 。每当 ObservableValue 的值发生更改时,都会通知 ChangeListener。 ObservableValue 是一个实体,它包装了一个值并允许观察值的变化。现在,为选择主题创建标签。使用HBox()创建 HBox 现在,将 ToggleButtons 添加到 HBox。使用setSpacing()方法设置按钮之间的间距。创建 VBox,将标签和HBox添加到VBox 。设置VBox 的大小和设置VBox 的填充(例如border-style、border-width、border-radius、border-insets、border-color)。创建场景并将其添加到舞台。设置舞台的标题和显示。
    // Java program to demonstrate ToggleButton
    // Class using ChangeListener
    import javafx.application.Application;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.control.Toggle;
    import javafx.scene.control.ToggleButton;
    import javafx.scene.control.ToggleGroup;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
      
    public class ToggleButtonDemo extends Application {
      
        // Create the Message Label
        Label selectionMsg = new Label("Your selection: None");
      
    public void start(Stage stage)
    {
      
        // Create four ToggleButtons
        ToggleButton csBtn = new ToggleButton("Computer Science");
        ToggleButton pBtn = new ToggleButton("Physics");
        ToggleButton chemBtn = new ToggleButton("Chemistry");
        ToggleButton mBtn = new ToggleButton("Maths");
      
        // Create a ToggleGroup
        final ToggleGroup group = new ToggleGroup();
      
        // Add all ToggleButtons to a ToggleGroup
        group.getToggles().addAll(csBtn, pBtn, chemBtn, mBtn);
      
        // Create a ChangeListener for the ToggleGroup
        group.selectedToggleProperty().addListener(
                       new ChangeListener() 
        {
            public void changed(ObservableValue ov,
                        final Toggle toggle, final Toggle new_toggle)
            {
                String toggleBtn = ((ToggleButton)new_toggle).getText();
                selectionMsg.setText("Your selection: " + toggleBtn);
            }
        });
      
        // Create the Label for the Selection
        Label selectLbl = new Label("Select the subject :");
      
        // Create a HBox
        HBox buttonBox = new HBox();
      
        // Add ToggleButtons to an HBox
        buttonBox.getChildren().addAll(csBtn, pBtn, chemBtn, mBtn);
      
        // Set the spacing between children to 10px
        buttonBox.setSpacing(10);
      
        // Create the VBox
        VBox root = new VBox();
      
        // Add the Labels and HBox to the VBox
        root.getChildren().addAll(selectionMsg, selectLbl, buttonBox);
      
        // Set the spacing between children to 10px
        root.setSpacing(10);
      
        // Set the Size of the VBox
        root.setMinSize(350, 250);
      
          
        // Set the padding of the VBox
        // Set the border-style of the VBox
        // Set the border-width of the VBox
        // Set the border-insets of the VBox
        // Set the border-radius of the VBox
        // Set the border-color of the VBox
        root.setStyle("-fx-padding: 10;"
                + "-fx-border-style: solid inside;"
                + "-fx-border-width: 2;"
                + "-fx-border-insets: 5;"
                + "-fx-border-radius: 5;"
                + "-fx-border-color: blue;");
      
        // Create the Scene
        Scene scene = new Scene(root);
      
        // Add the scene to the Stage
        stage.setScene(scene);
      
        // Set the title of the Stage
        stage.setTitle("A ToggleButton Example");
      
        // Display the Stage
        stage.show();
    }
      
        // Main Method
        public static void main(String[] args)
        {
      
            // launch the application
            Application.launch(args);
        }
    }
    

    输出:


    注意:上述程序可能无法在在线 IDE 中运行。请使用离线编译器。

    参考: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ToggleButton.html