调整JFrame大小时,Swing组件会抽搐

时间:2013-07-01 13:20:50

标签: java swing jframe layout-manager window-resize

我有一个未经修饰的JFrame,里面有很多components(例如JSplitPanesJPanels with GridBagLayouts, BoxLayouts, BorderLayouts等)。构建此JFrame的代码是 2500 行长度,因此我不会将其放在此处,或者它是简单版本,抱歉。

当我向JFrameright方向拖动bottom时,它会调整大小,但是当我将其拖到lefttop侧时, components内的JFrame 抽搐很多,所以看起来非常难看。

我的问题是:为什么会这样?如何防止它(如果可以的话)?有没有人在自己的实践中解决这个问题?

UPD:我为JFrame编写了自己的缩放器。它适用于其他组件数量较少的窗口。

1 个答案:

答案 0 :(得分:4)

调整框架大小会隐式验证附带的Container,这会导致每次大小更改时在受影响的组件上调用doLayout()。在调整AnimationTest的大小时,您可以在重复调用paintComponent()时看到类似的效果。正如您所观察到的那样,使用数千个组件的规模很小。作为替代方案,利用flyweight pattern仅渲染可见单元格,如JTableJTreeJList等中所做的那样。如果您不能使用其中一个,CellRendererPane,见过here,可能会有帮助。