我有一个带有子面板的 Swing-UI,其中包含人员列表(在滚动 Pane 中)。每个人都由一个 JPanel 表示,该 JPanel 由一个 ImageIcon 和四个 JLabel 组成。
该列表的行为基本上类似于循环缓冲区(具有附加条件行为),并且可以通过两个可以来回“旋转”列表的按钮进行更改。
E.g. forward: [A][B][C][D] -> [B][C][D][A]
它通常包含大约 15 个人,但可以从 UI 的其他部分添加和删除他们 - 然后也会在面板上调用更新。
我当前的解决方案是从滚动 Pane 中删除所有元素,并在用户单击其中一个按钮后重新添加所有元素(按新顺序)。
不幸的是,这占用了相当多的时间。 ImageIcons 会被缓存 - 如果该人之前在列表中,那么 Person-JPanel 也会被缓存,但占用最多时间的部分是重新添加所述元素。
所以我的问题是这是否可以以更有效的方式完成。
最佳答案
My current solution is to remove all elements from the scroll pane-panel and re-add all the elements
Container
API 有一个方法,允许您在面板中的任何位置添加组件。因此,要从末尾删除面板并将其放在开头,基本逻辑如下:
JPanel removed = panel.getComponent( panel.getComponentCount() - 1);
panel.remove(removed);
panel.add(removed, 0);
panel.revalidate();
panel.repaint();
关于Java Swing - 最佳实践 - 频繁添加/删除面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34980686/