JavaFX 控件 Spinner

本文详细介绍了 JavaFX 中的 Spinner 控件使用方法,包括如何创建整数和浮点数类型的 Spinner,设置编辑模式,监听值变化,以及使用自定义对象如 String 和 Student 类型作为 Spinner 的值工厂。通过实例展示了 Spinner 在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spinner

样式

//最小, 最大, 默认值, 步长
Spinner<Integer> spinner1 = new Spinner<>(0, 10, 5, 2);
Spinner<Double> spinner2 = new Spinner<>(0.0, 10.0, 5, 0.5);
spinner1.setEditable(true);


ObservableList<String> items = FXCollections.observableArrayList();
items.addAll("A", "B", "C", "D", "E");
Spinner<String> spinner3 = new Spinner<>(items);

spinner3.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);

spinner1.valueProperty().addListener(new ChangeListener<Integer>() {
    @Override
    public void changed(ObservableValue<? extends Integer> observable, Integer oldValue, Integer newValue) {
        System.out.println("observable = " + observable + ", oldValue = " + oldValue + ", newValue = " + newValue);
    }
});

SpinnerValueFactory

Student student1 = new Student("Student1", 10, 1);
Student student2 = new Student("Student2", 11, 2);
Student student3 = new Student("Student3", 12, 3);

ObservableList<Student> students = FXCollections.observableArrayList();
students.addAll(student1, student2, student3);

SpinnerValueFactory<Student> spinnerValueFactory = new SpinnerValueFactory.ListSpinnerValueFactory<>(students);
Spinner<Student> spinner4 = new Spinner<>();

spinnerValueFactory.setConverter(new StringConverter<Student>() {
    @Override
    public String toString(Student object) {
        if (object == null) {
            return "";
        }
        return object.name + "-" + object.id;
    }

    @Override
    public Student fromString(String string) {
        return null;
    }
});
//setValueFactory 要后调用
spinner4.setValueFactory(spinnerValueFactory);
### 如何在 JavaFX 中使用或创建时间选择器组件 #### 使用内置的时间选择器 `DatePicker` JavaFX 提供了一个名为 `DatePicker` 的控件,允许用户选择日期。虽然这不是严格意义上的时间选择器,但对于许多应用场景来说已经足够。 ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.DatePicker; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class DatePickerExample extends Application { @Override public void start(Stage primaryStage) { VBox vbox = new VBox(); // 创建一个新的日期选择器实例 DatePicker datePicker = new DatePicker(); vbox.getChildren().addAll(datePicker); Scene scene = new Scene(vbox, 300, 200); primaryStage.setTitle("Date Picker Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 对于更复杂的需求,比如需要精确到分钟甚至秒的选择,则可能需要构建自定义的时间选择器[^1]。 #### 构建自定义时间选择器 如果希望拥有更加灵活的时间选择功能,可以考虑组合多个现有的 UI 组件来实现一个定制化的时间选择器。例如,通过结合 `Spinner` 或者 `ComboBox` 来让用户分别挑选小时数、分钟数等部分。 下面是一个简单的例子: ```java import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class CustomTimePicker extends Application { private Spinner<Integer> hourSpinner; private Spinner<Integer> minuteSpinner; @Override public void start(Stage primaryStage) { GridPane grid = new GridPane(); grid.setPadding(new Insets(10)); grid.setHgap(10); grid.setVgap(10); Label lblHour = new Label("Hours:"); Label lblMinute = new Label("Minutes:"); hourSpinner = createTimeSpinner(0, 23); minuteSpinner = createTimeSpinner(0, 59); grid.add(lblHour, 0, 0); grid.add(hourSpinner, 1, 0); grid.add(lblMinute, 0, 1); grid.add(minuteSpinner, 1, 1); Button btnSubmit = new Button("Submit Time"); grid.add(btnSubmit, 0, 2, 2, 1); Scene scene = new Scene(grid, 300, 150); primaryStage.setTitle("Custom Time Picker"); primaryStage.setScene(scene); primaryStage.show(); btnSubmit.setOnAction(e -> System.out.println( String.format("Selected time is %d:%02d", hourSpinner.getValue(), minuteSpinner.getValue()))); } private Spinner<Integer> createTimeSpinner(int min, int max){ SpinnerValueFactory.IntegerSpinnerValueFactory valueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(min,max,min); return new Spinner<>(valueFactory); } public static void main(String[] args) { launch(args); } } ``` 此代码片段展示了如何利用 `Spinner` 控件创建一个简易版的时间输入界面,并且当点击提交按钮时打印所选中的具体时刻[^2]. 为了满足特定业务逻辑下的需求,还可以进一步扩展此类自定义组件的功能,如加入验证机制防止非法输入、提供快捷选项以便快速选取常用时段等等.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值