【发布时间】:2011-01-26 23:04:42
【问题描述】:
我正在构建一个自定义摆动组件(更多的是作为一个实际的思想实验而不是其他任何东西)。
我在重绘时遇到问题。我的组件有一个jtree、一个jtable,然后是一个完全自定义绘制的部分(希望最终是相当 MS 项目式的甘特视图)
具体问题是当jtree展开时,table和gannt视图应该更新以反映新展开的treenode下的新子项目。他们这样做,但大小没有更新,所以表格没有显示额外的行,我的甘特显示也没有用完整个高度。
奇怪的是,如果我触摸jframe 上的窗口句柄(所以即使调整大小为 1px) - 这似乎会强制完全刷新,然后组件正确显示,中间的表格和甘特图在右侧填充显示。
如果我不进行调整大小,则在树中的节点展开/折叠时调用 repaint,因为我看到了 ganttview 更新,但它似乎没有展开以占据整个高度屏幕。
我在下面放了一个屏幕截图,它在顶部显示了 resize() 之后的正确显示,下半部分是我在不调整大小的情况下展开节点时看到的。
我的断言是组件知道如何正确地 repaint() 自己,因为它在调整大小时做了正确的事情,但这必须触发一个强制更全面刷新的特殊事件。我尝试了update()、invalidate()、repaint() 的各种组合,但我似乎无法模拟调整父窗体大小时发生的完整repaint()。
谢谢,王牌
【问题讨论】:
标签: java swing custom-component