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

09-28 14:47