【发布时间】:2010-10-29 03:00:23
【问题描述】:
我正在开发一个 GUI,其中 JComponents 在屏幕上被“标记”。换句话说,不会显示实际的组件,而是显示组件的图像。这是一个图表,其中图表的节点是自定义 Swing 组件 - 或者更确切地说是 Swing 组件的标记图像。
现在我想在我的节点中显示特定组件的工具提示。
为此,我创建了一个与显示的 JComponent 相同的 JComponent,并使用鼠标 x 和 y 值询问 findComponentAt() 以获取正确的组件。这不是很好。如果我为节点重用 JComponents,如果我尝试为与最后绘制的节点大小不同的节点获取工具提示,就会感到困惑。如果我在计算工具提示时为每个节点创建一个新的 JComponent 并创建一个新的,则新的初始大小为 0,0。我可以使用 getPreferredSize() 计算来设置大小,但这仍然不起作用。根 JComponent(一个 JPanel)具有正确的大小,但它的子级还没有任何大小。
工具提示计算代码示例:
// Get a component that matches the stamped component
JComponent nodeComponent = getNodeComponent();
// These next two lines get the size right
nodeComponent.setSize(nodeComponent.getPreferredSize());
nodeComponent.revalidate();
Component componentTop = nodeComponent.findComponentAt(relativeX, relativeY);
componentTop 作为根 JComponent 返回,无论它传递什么 x 和 y 值。
那么是否有可能让 Swing 正确计算 JComponent 的大小和位置而无需实际绘制它们?
【问题讨论】: