【问题标题】:JavaFX tooltip on editable cell可编辑单元格上的 JavaFX 工具提示
【发布时间】:2014-02-25 23:48:48
【问题描述】:

我有一个带有可编辑单元格的TableView。我使用推荐的 JavaFx 回调来实现可编辑单元格。

myCol.setCellFactory(TextFieldTableCell.<Student>forTableColumn());

我想为每个可编辑的单元格添加一个工具提示,所以我必须自己做回调。 是否可以扩展上述回调以添加添加工具提示的功能,还是我必须从头开始编写自己的?

【问题讨论】:

    标签: java javafx tableview


    【解决方案1】:

    恐怕您必须自己制作 TableCell,然后将其分配给您的 TableColumn - myCol。

    一个简单的例子如图,you need to override all the functions of the TableCell as well :)

    class EditingCell extends TableCell<Student, String> {
    
        private TextField textField;
    
        public EditingCell() {
           setToolTip("YOUR MESSAGE");
        }
    
        @Override
        public void startEdit() {
            if (!isEmpty()) {
                super.startEdit();
                createTextField();
                setText(null);
                setGraphic(textField);
                textField.selectAll();
            }
        }
    
        @Override
        public void cancelEdit() {
            super.cancelEdit();
    
            setText((String) getItem());
            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.focusedProperty().addListener(new ChangeListener<Boolean>(){
                @Override
                public void changed(ObservableValue<? extends Boolean> arg0, 
                    Boolean arg1, Boolean arg2) {
                        if (!arg2) {
                            commitEdit(textField.getText());
                        }
                }
            });
        }
    
        private String getString() {
            return getItem() == null ? "" : getItem().toString();
        }
    }
    }
    

    然后将其添加到您的 TableColumn

    Callback<TableColumn, TableCell> cellFactory =
             new Callback<TableColumn, TableCell>() {
                 public TableCell call(TableColumn p) {
                    return new EditingCell();
                 }
             };
    

    firstNameCol.setCellFactory(cellFactory);
    

    别忘了让您的表格可编辑!

    table.setEditable(true);
    

    【讨论】:

    • 这种方式是否允许编辑功能(单击时单元格变为 EditText)?看起来这只是将工具提示功能添加到普通表格单元格。
    • 请看完整的例子,你需要重写TableCell类的功能:)
    • @ItachiUchiha,您可以添加您发布的代码的参考链接。此外,要完成答案,您可以根据 OP 的需要将工具提示附加到文本字段。
    • @UlukBiy 我首先向 OP 展示了将工具提示添加到单元格的方法(检查我的编辑),然后他要求我使其可编辑,所以我只是从文档中复制并粘贴到这里: )
    • 太棒了,我今天试试这个,然后回复你!
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多