【问题标题】:Swing components twitch when resizing JFrame调整 JFrame 大小时,Swing 组件会抽搐
【发布时间】:2013-07-01 13:20:50
【问题描述】:

我有一个未装饰的JFrame,里面有很多components(例如JSplitPanesJPanels with GridBagLayouts, BoxLayouts, BorderLayouts 等)。构建这个JFrame的代码是2500行长度,所以我不会放在这里,或者它是简单的版本,对不起。

当我将JFrame 拖动到rightbottom 一侧时,它会调整大小,但是当我将其拖动到lefttop 一侧时,JFrame 内的components 是抽搐很多,所以看起来很丑。

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

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

【问题讨论】:

  • 请问undecorated JFrame怎么可能导致JFrame by right or bottom side, it resizes OK

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


【解决方案1】:

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

【讨论】:

  • 如何将flyweight模式应用于JSplitPane
  • 您还需要实现编辑器,并且您也许能够只处理组件的一个子集; profile 是肯定的;注意invalidate(),“需要快速执行。”
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多