簡體   English   中英

可編輯單元格上的JavaFX工具提示

[英]JavaFX tooltip on editable cell

我有一個帶有可編輯單元格的TableView 我使用推薦的JavaFx回調來實現可編輯單元格。

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

我想為每個可編輯單元格添加一個工具提示,因此我必須進行自己的回調。 是否可以擴展上述回調以添加用於添加工具提示的功能,還是我必須從頭開始編寫自己的工具?

對此,我擔心您將必須制作自己的TableCell,然后將其分配給TableColumn-myCol。

如圖所示, 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();
    }
}
}

然后將其添加到您的TableColumn

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

firstNameCol.setCellFactory(cellFactory);

不要忘記使您的表可編輯!

table.setEditable(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM