Java Swing - 最佳实践 - 频繁添加/删除面板

标签 java performance swing

我有一个带有子面板的 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/

相关文章:

java - 如何更改 Eclipse 中的 "Dynamic Web Project"默认源和输出文件夹?

java - 无法反序列化 `java.time.Instant` 类型的值 - Jackson

JavaFX 文本在高 DPI 上无法正确缩放

java - JTable:看不到列名

java - JSpinner 的 fireStateChanged() 方法有问题

java - JTable 阻止所有排序

java - JFugue RealtimePlayer 无法同时演奏多种乐器

performance - L1缓存命中的周期/成本与在x86上注册的周期/成本?

html - 在 HTML 中链接 CSS 文件

php - 使大型 Mysqli 插入更高效