当前位置: 代码迷 >> Java相关 >> 关于JPanel的刷新有关问题.
  详细解决方案

关于JPanel的刷新有关问题.

热度:7124   发布时间:2013-02-25 21:44:29.0
关于JPanel的刷新问题..
代码如下,右键点按钮运行后想实现没隔一秒出现一个按钮,但总是在时间结束后所有按钮都一块出来..
求帮忙解决...
Java code
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JPanel;import javax.swing.SwingUtilities;public class forLP extends JDialog implements ActionListener{        JPanel panel_total ;    JPanel panel_center ;    JPanel panel_north;        public static void main(String[] args) throws InterruptedException{        new forLP().doIt();    }        public forLP(){        super();    }        public void doIt() throws InterruptedException {        panel_total = new JPanel(new BorderLayout());                panel_north = getNorthPanel();        panel_total.add(panel_north,BorderLayout.NORTH);                panel_center = new JPanel();        panel_total.add(panel_center,BorderLayout.CENTER);                this.add(panel_total);        this.setSize(500, 500);        this.setVisible(true);    }    private void setCenterPanel() throws InterruptedException {                int x = 250 ;         int y = 250 ;        int flag = 1 ;                panel_center.setLayout(null);        JButton jb = getButton(x,y);        jb.setBackground(getRandomColor());        panel_center.add(jb);        panel_center.updateUI();        /**         * 新建两个线程,每割1秒刷新出一个按钮         * 但是为什么总是到第二秒的时候两个按钮一起出来呢。。         */        SwingUtilities.invokeLater(new Runnable(){            public void run() {                try {                    Thread.sleep(1000);                    JButton jb = getButton(250, 300);                    panel_center.add(jb);                    panel_center.repaint();                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });                SwingUtilities.invokeLater(new Runnable(){            public void run() {                try {                    Thread.sleep(2000);                    JButton jb = getButton(350, 300);                    panel_center.add(jb);                    panel_center.repaint();                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });        //        for( int i = 1 ; i < 2 ; i ++){//            if( i%2 == 1){//                for(int j = 0 ; j < i ; j ++){//                    y = y + 20;//                    addButton(x,y,flag);//                    flag ++ ;//                }//                for(int k = 0 ; k < i ; k ++){//                    x = x + 20 ;//                    addButton(x,y,flag);//                    flag ++ ;//                }//            }else {//                for(int j = 0 ; j < i ; j ++){//                    y = y - 20;//                    addButton(x,y,flag);//                    flag ++ ;//                }//                for(int k = 0 ; k < i ; k ++){//                    x = x - 20 ;//                    addButton(x,y,flag);//                    flag ++ ;//                }//            }                //        }    }        public Color getRandomColor(){        Color color = new Color(        (new Double(Math.random() * 128)).intValue() + 128,           (new Double(Math.random() * 128)).intValue() + 128,           (new Double(Math.random() * 128)).intValue() + 128);        return color ;    }            private void addButton(final int x, final int y, final int flag) {        SwingUtilities.invokeLater(new Runnable(){            public void run() {                try {                    Thread.sleep(1000*flag);                    System.out.println("执行第"+flag+" 坐标:"+x+" " +y);                    JButton jb = getButton(x, y);                    panel_center.add(jb);                    panel_center.repaint();                    panel_center.updateUI();                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });    }    private JButton getButton(int x,int y) {        JButton jb = new JButton();        jb.setPreferredSize(new Dimension(10,10));        jb.setBounds(x, y, 10, 10);        jb.setBackground(getRandomColor());        jb.setVisible(true);        return jb;    }    private JPanel getNorthPanel() {        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));        JButton btn_1 = new JButton("点我");        btn_1.addActionListener(this);        panel.add(btn_1);        return panel;    }    @Override    public void actionPerformed(ActionEvent e) {        try {            setCenterPanel();        } catch (InterruptedException e1) {            e1.printStackTrace();        }            }}