JFace TableViewer显示两个工具提示 - 自定义和默认

时间:2013-01-11 11:41:38

标签: java eclipse-rcp jface

我在这里遇到了一个奇怪的情况,我需要帮助。

我使用TableViewer创建了一个相当简单的JFace表。当您不再执行任何操作时,您可以看到以下行为:当单元格的文本太大时,将在短暂等待后显示显示完整文本的工具提示。这是正常的行为,我猜本机控件会绘制这些工具提示。

现在我使用

添加了我自己的自定义工具提示
ColumnViewerToolTipSupport.enableFor( tableViewer, ToolTip.NO_RECREATE );

使用标签提供商的getToolTipText()方法提供(不同的)文本。

这很有效 - 差不多。我遇到了一个问题:有时(并非所有时间!)首先,出现本机工具提示,此后不久我的自定义工具提示就会被绘制出来,如此屏幕截图所示:

Screenshot showing two tooltips

我不知道如何有效地禁用每个单元格想要绘制的本机工具提示。这很难看,就像它一样......

对我来说有什么线索吗?

3 个答案:

答案 0 :(得分:3)

您可以像这样有效地禁用本机表工具提示:

viewer.getTable().setToolTipText("");

另见......

供参考。

答案 1 :(得分:1)

我无法确定您的屏幕截图,但我不认为您所看到的实际上是两个工具提示。

看到一个工具提示(您的自定义工具提示)。

你看到的其他“弹出窗口”是“这个表格单元格不够宽,无法显示其全部内容,因此我们将向您展示完整的文字,我们将显示如果我们确实有足够的空间来显示表格本身的所有“功能。

我提出的想法是,这实际上是理想的行为。允许用户继续“窥视”单元格的全部内容,同时还提供自定义工具提示(我确定传达了比单元格文本本身更多/不同的信息),为用户提供他们可能想要的一切。

如果重叠困扰你(并且我同意这是令人不愉快的),你可以通过覆盖CellLabelProvider.getToolTipShift()来略微改变自定义工具提示。

如果你想禁用“细胞太窄”的助手弹出,我恐怕对你没有任何建议;我捅了一会儿却想不出怎么压制它。甚至可能无法这样做。

答案 2 :(得分:1)

我想添加到@Jörg's回答:

在将表格的工具提示设置为空字符串之后,我仍然偶尔看到两个工具提示,其中一些列有工具提示,有些列没有。

原因是,没有工具提示的列的CellLabelProvider s从null方法(默认)和getToolTipText()返回false useNativeToolTip() }(也是默认值)。反过来,这会导致表格的工具提示重置为null。 (见ColumnViewerToolTipSupport中的第174行)。

我的第一次尝试是让标签提供者从getToolTipText()返回一个空字符串。虽然这解决了重复的工具提示问题,但现在显示了一个空的自定义工具提示(叹气)。但让useNativeToolTip()返回true终于解决了问题。

嗯,差不多,如果将鼠标指针从没有工具提示的列移动到带有工具提示的列,则不会显示工具提示。有关解决方法,请参阅此帖子:Native tooltips on JFace TableViewer not working flawlessly

如果由于某种原因需要非原生工具提示,请确保在useNativeToolTip()返回空字符串时为getToolTipText()返回true。

此处采用的注释适用于Windows 7,其他平台可能表现不同。