import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TimerDemo { JFrame frame; JButton but; Timer timer; public TimerDemo() { frame=new JFrame("Chevi.C Timer"); frame.setBounds(400,400,500,500); frame.setLayout(new FlowLayout()); but=new JButton("lChevi.C"); frame.getContentPane().add(but); but.addActionListener(new MyListener(frame)); timer=new Timer(1000,new MyListener(frame)); timer.start(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { new TimerDemo(); } } class MyListener implements ActionListener { JFrame frame; public MyListener(JFrame tt) { frame=tt; } public void actionPerformed(ActionEvent e) { frame.getContentPane().add(new JButton("Chevi.C")); frame.validate(); // frame.setVisible(false); // frame.setVisible(true); } }; 代码不用怎么标明了,很简单, 写万完这个程序后,最开心的不单单是知道了怎么用timer, 然而,知道了最更新一个画面. 不过这种方法会使布局失效,上面的例子是用默认的流式布局.固没什么问题出现. 还是能达到预期目的.