繁体   English   中英

如何将单个单元格工具提示/绑定属性设置为 JavaFX 中 TableColumn 的工具提示

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

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