[英]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.