首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaFX格式的可编辑TableView,仅数字输入

JavaFX是一种用于创建富客户端应用程序的Java库。它提供了丰富的图形界面组件和丰富的功能,使开发人员能够轻松构建跨平台的用户界面。

JavaFX中的TableView是一种表格视图组件,可以用于显示和编辑数据。可编辑TableView允许用户直接在表格中编辑数据,并提供了一些验证和限制输入的功能。

对于仅数字输入的可编辑TableView,可以通过以下步骤实现:

  1. 创建一个TableView对象,并定义表格的列数和列名。
  2. 创建一个ObservableList对象,用于存储表格中的数据。
  3. 为每一列定义一个TableColumn对象,并设置列的标题和数据类型。
  4. 使用setCellValueFactory方法将每一列与数据模型中的属性关联起来。
  5. 对于需要数字输入的列,可以使用setCellFactory方法设置一个自定义的TableCell工厂,用于创建只接受数字输入的单元格。
  6. 在自定义的TableCell工厂中,重写updateItem方法,限制输入为数字,并更新数据模型中的对应属性。
  7. 将ObservableList对象设置为TableView的数据源。

以下是一个示例代码:

代码语言:java
复制
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.stage.Stage;

public class EditableTableViewExample extends Application {

    public static class Person {
        private final SimpleStringProperty name;
        private final SimpleIntegerProperty age;

        public Person(String name, int age) {
            this.name = new SimpleStringProperty(name);
            this.age = new SimpleIntegerProperty(age);
        }

        public String getName() {
            return name.get();
        }

        public void setName(String name) {
            this.name.set(name);
        }

        public int getAge() {
            return age.get();
        }

        public void setAge(int age) {
            this.age.set(age);
        }
    }

    @Override
    public void start(Stage stage) {
        TableView<Person> tableView = new TableView<>();
        ObservableList<Person> data = FXCollections.observableArrayList(
                new Person("John", 25),
                new Person("Jane", 30),
                new Person("Bob", 35)
        );

        TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
        nameColumn.setCellFactory(TextFieldTableCell.forTableColumn());

        TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
        ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty().asObject());
        ageColumn.setCellFactory(column -> new NumericEditingCell());

        tableView.getColumns().addAll(nameColumn, ageColumn);
        tableView.setItems(data);

        Scene scene = new Scene(tableView);
        stage.setScene(scene);
        stage.show();
    }

    public static class NumericEditingCell extends TextFieldTableCell<Person, Integer> {

        public NumericEditingCell() {
            super(new IntegerStringConverter());
        }

        @Override
        public void updateItem(Integer item, boolean empty) {
            super.updateItem(item, empty);

            if (empty || item == null) {
                setText(null);
            } else {
                setText(item.toString());
            }
        }

        @Override
        public void commitEdit(Integer newValue) {
            if (!isEditing() && !newValue.equals(getItem())) {
                TableView<Person> tableView = getTableView();
                if (tableView != null) {
                    TableColumn<Person, Integer> column = getTableColumn();
                    Person person = tableView.getSelectionModel().getSelectedItem();
                    if (person != null) {
                        person.setAge(newValue);
                    }
                }
            }
            super.commitEdit(newValue);
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这个示例代码创建了一个可编辑的TableView,其中包含两列:Name和Age。Name列使用TextFieldTableCell允许用户编辑文本,Age列使用自定义的NumericEditingCell只允许数字输入。数据模型使用Person类表示,其中包含name和age属性。

对于腾讯云相关产品,可以考虑使用腾讯云的云服务器(ECS)来部署和运行JavaFX应用程序。腾讯云的云服务器提供了稳定可靠的计算资源,并且支持多种操作系统和应用程序的部署。您可以通过以下链接了解更多关于腾讯云云服务器的信息:腾讯云云服务器

请注意,以上答案仅供参考,具体的实现方式和产品选择可能因实际需求和环境而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券