版上的朋友你们好,
有一段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
1F:推 jinn:在actionPerformed里要建新的Thread去跑? 08/03 10:14
2F:→ lordfish62:可是我在回圈里加println()是有执行的耶 08/03 12:27
3F:→ lordfish62:X就是没有repaint() 08/03 12:29
4F:推 nodoors:SWING EDT? 08/04 00:55