[問題] listener事件處理method的執行問題

看板java作者時間11年前 (2014/08/02 16:42), 11年前編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
版上的朋友你們好, 有一段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
在actionPerformed裡要建新的Thread去跑?
08/03 10:14, 1F

08/03 12:27, , 2F
可是我在迴圈裡加println()是有執行的耶
08/03 12:27, 2F

08/03 12:29, , 3F
X就是沒有repaint()
08/03 12:29, 3F

08/04 00:55, , 4F
SWING EDT?
08/04 00:55, 4F
文章代碼(AID): #1JtAHTuF (java)
文章代碼(AID): #1JtAHTuF (java)