簡體   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