JavaFX |切换按钮类
ToggleButton 是一个可以被选中的特殊控件。基本上,ToggleButton 的呈现方式与 Button 类似,但这两种是不同类型的控件。 Button 是一个“命令”按钮,单击时会调用一个函数。但是 ToggleButton 是一个带有布尔值的控件,指示它是否被选中。它继承了ButtonBase类。
ToggleButton 也可以成组放置。默认情况下,ToggleButton 不在组中。在组中时,该组中一次只能选择一个 ToggleButton。要将两个 ToggleButtons 放在同一个组中,只需为它们分配相同的 ToggleGroup 值。与 RadioButtons 不同,ToggleGroup 中的 ToggleButtons 不会尝试强制组中至少一个选定的 ToggleButton。意思是,如果一个 ToggleButton 被选中,点击它会导致它被取消选中。使用 RadioButton,单击组中选定的按钮将不起作用。
类的构造函数:
- ToggleButton() :创建一个切换按钮,其标签为空字符串。
- ToggleButton(String txt) :创建一个以指定文本为标签的切换按钮。
- ToggleButton(String txt, Node graphics) :创建一个带有指定文本和图标作为其标签的切换按钮。
常用方法:
Method | Description |
---|---|
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 类的使用:
- 演示 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); } }
输出:
- 使用 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 extends Toggle> 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