[問題] listener事件處理method的執行問題
版上的朋友你們好,
有一段code的執行過程跟我想像的不一樣,請各位幫我看看。
code如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test
{
int x=20;
int y=50;
JButton button = new JButton("click me");
MyDrawPanel panel = new MyDrawPanel();
JFrame frame = new JFrame();
public void go()
{
button.addActionListener(new ButtonListener());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300, 300);
frame.setVisible(true);
for(int i=0; i<130; i++)
{
x++;
y++;
panel.repaint();
try
{
Thread.sleep(50);
}
catch(Exception e) {}
}
}
class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
// for(int i=0; i<130; i++)
// {
// x++;
// y++;
// panel.repaint();
// System.out.println(i);
// try
// {
// Thread.sleep(50);
// }
// catch(Exception e) {}
// }
}
}
class MyDrawPanel extends JPanel
{
public void paintComponent(Graphics g)
{
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.orange);
g.fillOval(x, y, 100, 100);
}
}
public static void main(String[] args)
{
Test t = new Test();
t.go();
}
}
這段code會畫一個橘色的圓形,
for loop會將圓形的座標不斷往右下移動並repaint(),
我的疑問是,
為什麼for loop這整段放在go()裡,可以看到執行loop時每次都會repaint(),
可以看到圓形移動的軌跡。
而若把同樣內容的for loop放在actionPerformed()裡,按下button後,
無法看到圓形移動的軌跡,只有執行完時看到圓形直接跳到最後的位置,
請問這是什麼原因造成的呢?麻煩各位了,謝謝
※ 編輯: lordfish62 (42.70.223.225), 08/02/2014 17:01:36
※ 編輯: lordfish62 (42.70.223.225), 08/02/2014 19:25:41
※ 編輯: lordfish62 (42.70.223.225), 08/02/2014 19:28:09
推
08/03 10:14, , 1F
08/03 10:14, 1F
→
08/03 12:27, , 2F
08/03 12:27, 2F
→
08/03 12:29, , 3F
08/03 12:29, 3F
推
08/04 00:55, , 4F
08/04 00:55, 4F
java 近期熱門文章
PTT數位生活區 即時熱門文章