【问题标题】:How to set individual cell tooltip/bind property to the tooltip for TableColumn in JavaFX如何将单个单元格工具提示/绑定属性设置为 JavaFX 中 TableColumn 的工具提示
【发布时间】:2020-06-29 22:26:45
【问题描述】:

我有一个表格,我想在其中显示与用户悬停单元格不同的值相关的特定列的工具提示。我通常知道,工具提示是为确切的单元格对象值或另一个字符串设置的。但我想显示一个与每个

相关的不同值

如图所示,我正在显示一个“类型”,并且我希望用户能够将鼠标悬停在单个“类型”单元格上以查看“子类型”字符串作为工具提示。 (如图所示,但我希望它显示实际类型而不是虚拟字符串。)两者都在 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();

}

【问题讨论】:

  • 不清楚要在工具提示中显示的“子类型”在哪里定义。
  • 对不起,我没有考虑包括那个。子类型和类型都在 IDisplayLayer 接口中定义。包含代码sn-p。谢谢!
  • 在不改变类型的情况下可以改变子类型吗?
  • 在构造DisplayManager(实现IDisplayManager)时不能同时设置两者。
  • 如果可能的话,如果你有一个Type 类,它的字符串值和子类型是它的属性,可能会更容易;但当然,这在您的上下文中可能没有意义。

标签: java javafx tooltip tablecolumn


【解决方案1】:

由于您的单元格有效地依赖于模型对象中的两个属性,您可能需要一个类似这样的表格列配置:

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);
        }
    }
});

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多