简体   繁体   English

可编辑单元格上的JavaFX工具提示

[英]JavaFX tooltip on editable cell

I have a TableView with editable cells. 我有一个带有可编辑单元格的TableView I use the recommended JavaFx callback to achieve editable cells. 我使用推荐的JavaFx回调来实现可编辑单元格。

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

I want to add a tooltip to each of these editable cells, so I have to make my own Callback. 我想为每个可编辑单元格添加一个工具提示,因此我必须进行自己的回调。 Is it possible to extend the above Callback to add functionality for adding a ToolTip or do I have to write my own from scratch? 是否可以扩展上述回调以添加用于添加工具提示的功能,还是我必须从头开始编写自己的工具?

I am afraid for this you will have to make your own TableCell and then assign it to your TableColumn - myCol. 对此,我担心您将必须制作自己的TableCell,然后将其分配给TableColumn-myCol。

A simple example is as shown, you need to override all the functions of the TableCell as well :) 如图所示, you need to override all the functions of the TableCell as well :)是一个简单的示例, 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();
    }
}
}

and then add this to your TableColumn 然后将其添加到您的TableColumn

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

and

firstNameCol.setCellFactory(cellFactory);

Don't forget to make your table as editable ! 不要忘记使您的表可编辑!

table.setEditable(true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM