什么是三态复选框?如何在 JavaFX 中创建三态复选框?

javafxobject oriented programmingprogramming更新于 2026/1/4 9:48:17

复选框是一种选择控件,形状为方形,中间带有勾选标记。通常,复选框有两种状态:选中和未选中。

根据 GUI(技术)的不同,我们还可以添加第三种状态,名为 undefined/undetermined,表示当前复选框的状态既不是选中也不是未选中。

JavaFX 支持三态复选框,javafx.scene.control.CheckBox 类表示复选框,它包含三个布尔属性 −

  • allowIndeterminate − 此属性指定复选框是否应具有所有三种状态。您可以使用 setAllowIndeterminate() 方法设置此属性的值。

  • indeterminate − 此属性指定复选框是否处于未定义状态。您可以使用 setIndeterminate() 方法设置此属性的值。

  • selected − 此属性指定当前复选框是否处于选中状态。您可以使用 setSelected() 方法设置此属性的值。

切换所有三种状态 −

  • 实例化 CheckBox 类。

  • 通过传递布尔值 true 作为参数来调用 setAllowIndeterminate() 方法。

  • 通过传递布尔值 true 作为参数来调用 setIndeterminate() 方法。

  • 将创建的复选框添加到父节点。

示例

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
public class CheckBox_Undefined_State extends Application {
   public void start(Stage stage) {
      //创建复选框
      CheckBox checkBox1 = new CheckBox("Salary");
      CheckBox checkBox2 = new CheckBox("Over Time Allowence");
      CheckBox checkBox3 = new CheckBox("Bonus");
      CheckBox checkBox4 = new CheckBox("Night Shift Allowence");
      Label label = new Label("Select Recieved Allowences:");
      Font font = Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 12);
      label.setFont(font);
      //将不确定状态设置为 true
      checkBox2.setAllowIndeterminate(true);
      checkBox2.setIndeterminate(true);
      checkBox4.setAllowIndeterminate(true);
      checkBox4.setIndeterminate(true);
      //将切换按钮添加到窗格
      VBox vBox = new VBox(5);
      vBox.setPadding(new Insets(5, 5, 5, 50));
      vBox.getChildren().addAll(label, checkBox1, checkBox2, checkBox3, checkBox4);
      //设置舞台
      Scene scene = new Scene(vBox, 595, 150, Color.BEIGE);
      stage.setTitle("Check Box Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

输出

 


相关文章