我正在绘制一个JButtons数组。
调用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上的所有属性,则应该同时重新绘制所有按钮。