Java for循环退出后,背景色将更改。有人能解释一下吗?

Java for循环退出后,背景色将更改。有人能解释一下吗?,java,Java,CellPane是一个JPanel。在构造函数中,我添加了一个鼠标侦听器。单击时,背景应变为蓝色,然后在控制台上打印值。但问题是首先打印值,然后更改背景。为什么? public CellPane() { addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) {

CellPane是一个JPanel。在构造函数中,我添加了一个鼠标侦听器。单击时,背景应变为蓝色,然后在控制台上打印值。但问题是首先打印值,然后更改背景。为什么?

public CellPane() {
            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    defaultBackground = getBackground();
                    setBackground(Color.BLUE);
                    for(int i=0;i<1000000;i++)
                    {
                        System.out.println(i);
                    }
                }

                @Override
                public void mouseExited(MouseEvent e) {
                    setBackground(defaultBackground);
                }
            });
        }
public单元窗格(){
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效mouseClicked(MouseEvent e){
defaultBackground=getBackground();
挫折背景(颜色:蓝色);

对于(int i=0;i,因为只有在重新绘制组件时颜色才会改变。并且重新绘制发生在swing线程上(只有一个线程)这与事件处理程序运行的线程相同。因此,通过保持线程而不立即返回,您将延迟重新绘制。并且您的打印也将在重新绘制之前进行。

因为颜色仅在组件重新绘制时更改。而重新绘制发生在swing线程上(只有一个线程)事件处理程序运行在同一个线程上。因此,如果保持线程不变而不立即返回,则会延迟重新绘制。并且打印也会在重新绘制之前进行