gpt4 book ai didi

java - 同步重绘 JButton 集合

转载 作者:行者123 更新时间:2023-12-01 15:57:40 25 4
gpt4 key购买 nike

我正在绘制 JButton 数组。调用 setBackground 会立即重绘该按钮。

问题是,当重复调用redraw时,按钮不会同步更新。

即在 redraw() 的同一次调用中,一个按钮的重绘与另一个按钮之间存在轻微的延迟。

有没有办法让所有按钮一起重绘?

如果有任何指示或建议,我将不胜感激。谢谢。

注意:

  • CellButton 扩展了 javax.swing.JButton。
  • 所有按钮都包含在 JPanel grid 中。
<小时/>
final JPanel grid = new JPanel();

Collection<CellButton> cells = new ArrayList<CellButton>();

for(int j=0;j<gridSize;j++){
for(int i=0;i<gridSize;i++){
CellButton cellButton = new CellButton(i,j);
cellButton.setBackground(Color.gray);
cellButton.addMouseListener(gridListener);
cells.add(cellButton);
grid.add(cellButton);
}
}

...

void redraw(){
Iterator<CellButton> iter = cells.iterator();
int x,y;
while(iter.hasNext()){
CellButton cellBtn=iter.next();
x=cellBtn.x();
y=cellBtn.y();
cellBtn.setBackground(model.getColor(x,y));
}
}`

最佳答案

您是否在事件调度线程上执行代码。设置背景只会安排一个组件进行重绘。 RepaintManagers 收集所有重绘请求并一次性执行它们以提高效率。重新喷漆仅在 EDT 上进行。因此,如果您更改 EDT 上的所有属性,按钮都应该同时重新绘制。

关于java - 同步重绘 JButton 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com