gpt4 book ai didi

java - 自定义 Swing 组件: Problem with repaint()

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:32 24 4
gpt4 key购买 nike

我正在构建一个自定义 Swing 组件(更多的是作为一个实际的思想实验而不是其他任何东西)。

我在重新绘制时遇到问题。我的组件有一个 jtree、一个 jtable,然后是完全自定义绘制的部分(希望最终成为 MS 项目式的甘特 View )

具体问题是,当jtree扩展时,表和gannt View 应该更新以反射(reflect)新扩展的树节点下的新子项目。他们这样做了,但尺寸没有更新,所以表格没有显示额外的行,而且我的甘特显示也没有用完整个高度。

奇怪的是,如果我触摸jframe上的窗口句柄(因此即使调整大小1px) - 这似乎会强制完全刷新并且组件然后正确显示,中间的表格和右侧的甘特都会填满显示。

如果我不调整大小,则当树中的节点展开/折叠时会调用重绘,正如我看到甘特 View 更新一样,但它似乎没有展开以占据屏幕的整个高度。

我在下面放置了一个屏幕截图,其中顶部显示了调整大小()后的正确显示,下半部分显示了如果我扩展节点而不进行调整大小,我会看到的结果。

我的断言是组件知道如何正确地重新绘制()本身,因为它在调整大小时做了正确的事情,但这必须触发一个特殊事件来强制更全面的刷新。我尝试了 update()、invalidate()、repaint() 的各种组合,但我似乎无法模拟调整父表单大小时发生的完整 repaint() 。

Screenshot

谢谢,艾斯

最佳答案

the odd thing is that if I touch the window handle on the jframe (so even a 1px resize) - this seems to force a complete refresh and the component then displays properly,

当调整框架大小时,组件将重新验证并重新绘制。因此,您需要在代码中的某个位置(表和 gannt View 更新的位置)添加:

customComponent.revalidate();
customComponent.repaint();

关于java - 自定义 Swing 组件: Problem with repaint(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com