2016-06-30 1 views
0

CellPaneはJPanelです。コンストラクタでは、マウスのリスナーを追加しました。背景をクリックすると背景が青色に変わり、コンソールに値が表示されます。しかし、問題は最初に値が印刷されてから背景が変わることです。どうして?forループが終了した後、背景色が変化します。誰でも説明できますか?

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); 
       } 
      }); 
     } 

答えて

2

コンポーネントが再描画されますときに色のみ変化するため。そして、再描画は、イベントハンドラが実行するスレッドと同じスイングスレッド(スレッドが1つしかありません)で発生します。だから、スレッドを保持し、すぐに戻りません、あなたは再描画を延期しています。そしてあなたのプリントは、再塗装の前にも起こります。

+0

ありがとうございます。どうもありがとうございます!!! – Nymeria