我正在构建一个自定义的摇摆组件(更像是一个实用的思想实验而不是其他任何东西)。
我在重新粉刷方面遇到了问题。我的组件有一个jtree
,一个jtable
,然后是一个完全自定义绘制的部分(希望最终成为一个非常MS项目式的ganttview)
具体问题是当jtree扩展时,表和gannt视图应该更新以反映新扩展的treenode下的新子项目。他们这样做,但大小没有更新,所以表格没有显示额外的行,我的gannt显示也没有用完全高。
奇怪的是,如果我触摸jframe
上的窗口句柄(所以即使是1px调整大小) - 这似乎强制完全刷新,然后组件正确显示,中间的表和右边的gannt填满了显示屏。
如果我没有进行调整大小,那么当树中的节点被展开/折叠时会调用重绘,因为我看到了ganttview更新,但它似乎没有扩展到占据整个高度屏幕。
我在下面输入了一个屏幕截图,其中显示了调整大小()后面的正确显示,以及下半部分,这是我在没有调整大小的情况下展开节点时看到的内容。
我的断言是组件知道如何正确地重绘()本身,因为它在调整大小时做了正确的事情,但这必须触发强制更全面刷新的特殊事件。我尝试了update
(),invalidate
(),repaint
()的各种组合,但我似乎无法模拟发生时的完整repaint
()父表格已调整大小。
谢谢你,Ace
答案 0 :(得分:1)
奇怪的是,如果我触摸jframe上的窗口句柄(即使是1px调整大小) - 这似乎强制完全刷新,然后组件正确显示,
调整框架大小时,组件将重新生效并重新绘制。因此,在代码中的某处(表和gannt视图的更新),您需要添加:
customComponent.revalidate();
customComponent.repaint();