【问题标题】:DatePicker in javafx TableCelljavafx TableCell 中的 DatePicker
【发布时间】:2014-04-15 05:12:54
【问题描述】:

我已经实现了一个自定义 datePickerTableCell 来在单元格编辑时显示一个日期选择器。我正在使用 ExtFX DatePicker (https://bitbucket.org/sco0ter/extfx/overview)。一切正常,除了当我手动输入日期而不是从选择器中选择它时,我在 commitEdit() 上收到 NullPointerException。

datePicker.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
    if (t.getCode() == KeyCode.ENTER) {
        if(getItem() == null) {
            commitEdit(null);
        } else {
            commitEdit(getItem());
        }
    } else if (t.getCode() == KeyCode.ESCAPE) {
        cancelEdit();
    }
}
});

我找不到这里出了什么问题。

【问题讨论】:

  • 哪一行出现空指针异常?

标签: javafx tablecell


【解决方案1】:

也许看看这个例子。它使用颜色选择器,但也适用于日期选择器:

public class ColorTableCell<T> extends TableCell<T, Color> {    
    private final ColorPicker colorPicker;

    public ColorTableCell(TableColumn<T, Color> column) {
        this.colorPicker = new ColorPicker();
        this.colorPicker.editableProperty().bind(column.editableProperty());
        this.colorPicker.disableProperty().bind(column.editableProperty().not());
        this.colorPicker.setOnShowing(event -> {
            final TableView<T> tableView = getTableView();
            tableView.getSelectionModel().select(getTableRow().getIndex());
            tableView.edit(tableView.getSelectionModel().getSelectedIndex(), column);       
        });
        this.colorPicker.valueProperty().addListener((observable, oldValue, newValue) -> {
            if(isEditing()) {
                commitEdit(newValue);
            }
        });     
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    }

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

        setText(null);  
        if(empty) {     
            setGraphic(null);
        } else {        
            this.colorPicker.setValue(item);
            this.setGraphic(this.colorPicker);
        } 
    }
}

如果您使用的是 Java 7,请将 lambda 替换为匿名内部类,但它应该也能正常工作。完整的博文是here

【讨论】:

    【解决方案2】:

    看看this example 是否有帮助。它从那里使用 Java 8 和 DatePicker 控件。

    【讨论】:

    • 这个例子看起来和我的实现没有什么不同。我发现那一行 commitEdit(getItem()); getItem() 持有旧值。甚至在按回车提交之前,我看到了 NullPointerException
    【解决方案3】:

    This example 也可能有帮助。它使用 Java 8 的 DatePicker 和 TableView 控件。

    【讨论】:

      【解决方案4】:

      在使用TextArea 作为表格单元格时,我遇到了类似的问题。问题是我在TableCell 实现中使用了startEdit。使用TableView#edit 而不是startEdit 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 2020-09-01
        • 2015-07-22
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        相关资源
        最近更新 更多