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

Javafx TableCell开始编辑时,显示旧值

Javafx TableCell是JavaFX框架中的一个组件,用于在表格中显示和编辑数据。TableCell可以显示各种类型的数据,并提供了编辑功能,使用户能够直接在表格中修改数据。

当TableCell开始编辑时,通常会显示该单元格中的旧值。这是为了让用户知道当前单元格中保存的是什么数据,并且可以在编辑过程中进行对比和参考。

Javafx TableCell的开始编辑事件可以通过实现TableCell的startEdit()方法来触发。在开始编辑时,可以通过调用getCellData()方法获取旧值,并将其显示在编辑器中。编辑器可以是一个文本框、下拉列表或其他适合的组件,用于用户输入新值。

以下是一个示例代码,展示了如何在Javafx TableCell开始编辑时显示旧值:

代码语言:txt
复制
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class TableCellExample extends Application {

    public static class Person {
        private final StringProperty name;

        public Person(String name) {
            this.name = new SimpleStringProperty(name);
        }

        public StringProperty nameProperty() {
            return name;
        }
    }

    @Override
    public void start(Stage primaryStage) {
        TableView<Person> tableView = new TableView<>();
        TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
        nameColumn.setCellFactory(column -> new TableCell<Person, String>() {
            private TextField textField;

            @Override
            public void startEdit() {
                super.startEdit();
                if (textField == null) {
                    createTextField();
                }
                setText(null);
                setGraphic(textField);
                textField.setText(getString());
                textField.selectAll();
            }

            @Override
            public void cancelEdit() {
                super.cancelEdit();
                setText(getString());
                setGraphic(null);
            }

            @Override
            public void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setText(null);
                    setGraphic(null);
                } else {
                    if (isEditing()) {
                        if (textField != null) {
                            textField.setText(getString());
                        }
                        setText(null);
                        setGraphic(textField);
                    } else {
                        setText(getString());
                        setGraphic(null);
                    }
                }
            }

            private void createTextField() {
                textField = new TextField(getString());
                textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
                textField.setOnKeyPressed(event -> {
                    if (event.getCode().equals(KeyCode.ENTER)) {
                        commitEdit(textField.getText());
                    } else if (event.getCode().equals(KeyCode.ESCAPE)) {
                        cancelEdit();
                    }
                });
            }

            private String getString() {
                return getItem() == null ? "" : getItem();
            }
        });

        tableView.getColumns().add(nameColumn);
        tableView.getItems().add(new Person("John Doe"));

        primaryStage.setScene(new Scene(tableView));
        primaryStage.show();
    }

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

在上述示例中,我们创建了一个TableView,并添加了一个名为"Name"的TableColumn。为了在TableCell中显示和编辑数据,我们使用了一个TextField作为编辑器。当TableCell开始编辑时,我们调用startEdit()方法创建并显示TextField,并将旧值设置为TextField的初始值。当用户完成编辑时,我们调用commitEdit()方法提交新值。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。在实际开发中,你可以根据需要使用不同的编辑器,如下拉列表、日期选择器等,以满足不同类型数据的编辑需求。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/um

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

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

相关·内容

领券