现在我使用以下方法更改按钮的背景颜色
button.setBackground(Color.WHITE);
这是一个例子。
但是当我有一个巨大的 jbuttons 网格(1000+)时,仅仅运行一个 for 循环来改变每个按钮的背景是非常非常慢的。您可以看到网格逐个框慢慢变白。我真的不想要这个
有没有更好的方法同时将网格上的每个 JButton 更改为相同的颜色?
这就是我制作网格的方式,所使用的数字仅作为示例......
grid = new JPanel(new GridLayout(64, 64, 0, 0));
共有 4096 个按钮,大约需要 30 秒以上才能将每个按钮更改为相同的颜色。
编辑1:我需要按钮是可点击的,例如当我点击按钮时它会变成蓝色。单击所有按钮后,将每个按钮的颜色更改为白色。现在我的工作正常,但改变每个按钮的颜色很慢。
编辑2:这就是我更改按钮的方式:
new javax.swing.Timer(300, new ActionListener() {
int counter = 0;
public void actionPerformed(ActionEvent e) {
if (counter >= counterMax) {
((Timer) e.getSource()).stop();
}
Color bckgrndColor = (counter % 2 == 0) ? flashColor : Color.white;
for (JButton button : gridButton) {
button.setBackground(bckgrndColor);
}
counter++;
}
}).start();
事实上你看到盒子被重新粉刷单独地指示双缓冲已关闭,或者按钮 UI 中的绘制代码使用paintImmediately()
.
我使用 64x64 JButtons 测试了您的设置,并确保所有 UI 操作都在 EDT(事件调度线程)中执行。我可以确认您看到的效果,更改所有按钮的背景大约需要 1200 毫秒,每个框都会立即重新绘制。
您可以通过将网格设置为之前不可见并在更改背景后设置为可见来绕过立即重新绘制:
grid.setVisible(false);
for (Component comp : grid.getComponents()) {
comp.setBackground(color);
}
grid.setVisible(true);
这导致网格只进行一次重绘,并将时间减少到约 300 毫秒(因子 4)。
对于频繁更新来说这仍然太慢,所以你最好使用绘制网格的自定义组件,或者一个蝇量容器(trashgod 在你的问题的评论中建议的)如果你想允许网格单元是任意组件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)