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

如何在FXML中定义一个可编辑的TableCell?

在FXML中定义一个可编辑的TableCell,可以通过以下步骤实现:

  1. 创建一个自定义的TableCell类,继承自javafx.scene.control.TableCell,并指定泛型类型为需要显示的数据类型。例如,如果需要显示一个String类型的数据,可以创建一个名为StringEditableTableCell的类。
代码语言:java
复制
import javafx.scene.control.TableCell;
import javafx.scene.control.TextField;

public class StringEditableTableCell extends TableCell<YourDataType, String> {
    private TextField textField;

    public StringEditableTableCell() {
        textField = new TextField();
        textField.setOnKeyPressed(event -> {
            if (event.getCode().equals(KeyCode.ENTER)) {
                commitEdit(textField.getText());
            } else if (event.getCode().equals(KeyCode.ESCAPE)) {
                cancelEdit();
            }
        });
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setText(null);
            setGraphic(null);
        } else {
            if (isEditing()) {
                textField.setText(item);
                setText(null);
                setGraphic(textField);
            } else {
                setText(item);
                setGraphic(null);
            }
        }
    }

    @Override
    public void startEdit() {
        super.startEdit();
        setText(null);
        setGraphic(textField);
        textField.requestFocus();
    }

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

    @Override
    public void commitEdit(String newValue) {
        super.commitEdit(newValue);
        // 在这里可以处理编辑后的数据,例如更新到数据库等操作
    }
}
  1. 在FXML文件中,使用fx:factory标签来指定TableCell的工厂类。例如,如果需要在一个TableView中显示一个名为name的可编辑列,可以这样定义:
代码语言:xml
复制
<TableView fx:id="tableView">
    <columns>
        <TableColumn text="Name">
            <cellValueFactory>
                <PropertyValueFactory property="name" />
            </cellValueFactory>
            <cellFactory>
                <fx:factory>
                    <StringEditableTableCell />
                </fx:factory>
            </cellFactory>
        </TableColumn>
    </columns>
</TableView>
  1. 在Java代码中,将FXML文件加载并与Controller类关联。然后,在Controller类中获取TableView的引用,并设置数据源。
代码语言:java
复制
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;

import java.net.URL;
import java.util.ResourceBundle;

public class YourController implements Initializable {
    @FXML
    private TableView<YourDataType> tableView;

    @FXML
    private TableColumn<YourDataType, String> nameColumn;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        // 设置数据源
        tableView.setItems(yourDataList);
    }
}

这样,就可以在FXML中定义一个可编辑的TableCell,并实现相应的编辑功能。

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

相关·内容

没有搜到相关的结果

领券