[英]How to set individual cell tooltip/bind property to the tooltip for TableColumn in JavaFX
我有一个表格,我想在其中显示特定列的工具提示,该列与与用户悬停在其上的单元格不同的值相关。 我通常知道,工具提示是为确切的单元格对象值或其他字符串设置的。 但我想显示与每个相关的不同值
就像显示的图像一样,我正在显示一个“类型”,我希望用户能够将鼠标悬停在单个“类型”单元格上以查看“子类型”字符串作为工具提示。 (就像在图像中一样,但我希望它显示实际类型而不是虚拟字符串。)两者都在 IDisplayLayer 接口中定义。
我需要在工具提示中显示特定的 subtypeProperty,而不是字符串。 这个子类型需要像普通的 PropertyValueFactory 绑定数据一样绑定。 我怎样才能绑定这个? 提前感谢您的任何帮助/指导。
TableColumn<IDisplayLayer, String> type = new TableColumn<>("Type");
PropertyValueFactory<IDisplayLayer, String> pvf2 = new PropertyValueFactory<IDisplayLayer, String>("layerType");
type.setCellFactory
(
column ->
{
return new TableCell<IDisplayLayer, String>()
{
@Override
protected void updateItem(String item, boolean empty)
{
Tooltip tip = new Tooltip("This is a tooltip"); //where I need to set the value here
super.updateItem(item, empty);
setText(item);
setTooltip(tip);
}
};
});
两者都定义的地方:公共接口 IDisplayLayer {
String getLayerType();
void setLayerType(String s);
StringProperty layerTypeProperty();
String getLayerSubtype();
void setLayerSubtype(String s);
StringProperty layerSubtypeProperty();
}
由于您的单元格实际上依赖于模型对象中的两个属性,因此您可能需要一个类似于以下内容的表列配置:
TableColumn<IDisplayLayer, IDisplayLayer> type = new TableColumn<>("Type");
type.setCellValueFactory(cellData -> new SimpleObjectProperty<>(cellData.getValue()));
type.setCellFactory(col -> new TableCell<>() {
private final Tooltip tooltip = new Tooltip();
@Override
protected void updateItem(IDisplayLayer row, boolean empty) {
super.updateItem(row, empty);
textProperty().unbind();
tooltip.textProperty().unbind();
if (row == null || empty) {
setText(null);
setTooltip(null);
} else {
textProperty().bind(row.layerTypeProperty());
tooltip.textProperty().bind(row.layerSubtypeProperty());
setTooltip(tooltip);
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.