Java Swing - 最佳实践 - 经常添加/删除面板

时间:2016-01-24 19:54:13

标签: java performance swing

我有一个带有子面板的Swing-UI,其中包含一个人员列表(在滚动窗格内)。每个人都由一个由ImageIcon和四个JLabel组成的JPanel表示。

该列表基本上表现得像一个循环缓冲区(具有附加的条件行为),并且可以通过两个可以“旋转”的按钮进行更改。来回的清单。

E.g. forward: [A][B][C][D] -> [B][C][D][A]

它通常包含大约15个人,但它们可以在UI的另一部分中添加和删除 - 然后也会在面板上调用更新。

我目前的解决方案是从用户点击其中一个按钮后,从滚动窗格面板中删除所有元素并重新添加所有元素(按新顺序排列)。

不幸的是,这需要花费很多时间。 ImageIcons是缓存的 - 如果那个人以前在列表中,那么Person-JPanels也是如此,但占用时间最多的部分是重新添加所述元素。

所以我的问题是,如果能以更有效的方式完成。

1 个答案:

答案 0 :(得分:1)

  

我目前的解决方案是从滚动窗格面板中删除所有元素并重新添加所有元素

Container API有一种方法,允许您在面板中的任何位置添加组件。因此,要从最后删除面板并将其放在开头,基本逻辑将类似于:

JPanel removed = panel.getComponent( panel.getComponentCount() - 1);
panel.remove(removed);
panel.add(removed, 0);
panel.revalidate();
panel.repaint();