【问题标题】:How to set Tool Tip on the each Cell of JavaFX Table Mouse-Over?如何在 JavaFX Table Mouse-Over 的每个单元格上设置工具提示?
【发布时间】:2012-11-08 05:18:27
【问题描述】:

我是 JavaFX 的新手。我创建了一个TableView,看起来像所附图片。

我想在鼠标悬停时在表格的每个单元格上显示一个工具提示。我已经设置了两个CellFactory;一个在第一列显示复选框,一个在第二列显示图像。

所以显示工具提示一定不能影响这两个渲染的列。有什么方法可以在鼠标悬停时在表格的每个单元格上显示工具提示,并且不应该影响其他单个列单元格的渲染。

【问题讨论】:

  • 我不清楚“隐藏渲染”是什么意思。为什么一个单独的stage的ToolTip要在TableView中隐藏一个节点?您能否发布一个显示该问题的小型、可自执行的应用程序?否则请改写问题。
  • 对除第 1 和第 2 列之外的其余列使用另一个单元工厂。在此单元格工厂中添加工具提示控件以显示单元格值。
  • @Sebastian 感谢您的回复。我已经更新了我的上述问题。问题是 - 我不希望这两个列单元格渲染器(复选框和图像)在显示工具提示时受到影响,因为我看到很少有显示工具提示的示例,并且在示例中他们将 Cell Factory 设置为渲染器工具提示,所以如果我需要为每列设置渲染器,然后复选框和图像的渲染器可能会生效。对不起,我是 javafx 的新手。简单来说,我想要单元格上的工具提示。
  • @AshishPancholi 单元工厂应用于列。每个表格列都有自己的单元格工厂,即使您没有设置默认值也会被使用。正如您所说,您已经为第一列和第二列编写了单元工厂。为其他列编写一个更常见的单元工厂(包含工具提示)。单元工厂只会影响您通过column.setCellFactory() 设置的列。
  • @AshishPancholi AFAIK 没有。除了默认单元工厂之外的每个自定义行为都需要自定义单元工厂。您可以将继承用于您未来的需求。例如编写扩展 API 表格单元的“工具提示”表格单元。然后编写扩展“工具提示”的“新特色”表格单元格。

标签: java tooltip render javafx-2 cell


【解决方案1】:

当我需要某个列的单元格中的工具提示时,我会这样做:

TableColumn<Person, String> nameCol = new TableColumn<Person, String>("Name");

nameCol.setCellFactory
 (
   column ->
    {
      return new TableCell<Person, String>()
       {
         @Override
         protected void updateItem(String item, boolean empty)
          {
             super.updateItem(item, empty);
             setText( item );
             setTooltip(new Tooltip("Life is short, make most of it..!"));
          }
       };
    });

【讨论】:

    【解决方案2】:

    这是一个通用的解决方案,如果有人正在寻找简单的东西。它遵循与其他自定义单元工厂相同的约定。

    只需创建一个新类并将TooltippedTableCell 粘贴到其中即可;然后像这样设置所需列的自定义单元工厂:

    someColumn.setCellFactory(TooltippedTableCell.forTableColumn());
    

    【讨论】:

    • 这是一个非常好的解决方案,但是,它需要一些调整才能使其适用于非字符串单元格项目。但无论如何,谢谢!
    • 谢谢,@rapasoft。您是否尝试传入StringConverter;这不行吗?
    • 我刚刚意识到有一种方法可以传递StringConverter :)。但无论如何,我无法使用绑定到特定类型(或类型父级)的StringConverter,因为有项目的自定义实例(例如数字、对象等),但我总是能够调用String.valueOf(...) on他们,这就足够了。至少我希望如此,我是 JavaFX 菜鸟 ;)
    【解决方案3】:

    只需创建工具提示并安装在您想要的节点上

        Cell c = new Cell();
        Tooltip.install(c, new Tooltip("text"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2016-09-29
      • 2014-05-22
      • 2012-11-21
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多