<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 38,  comments - 22,  trackbacks - 0
          Swing的事件處理中,對于非常費時的處理如果不用多線程會造成主界面的阻塞,即界面一片白色,這樣非常不好的,也是不提倡的,而起用多線程進行事件處理又面臨一個問題即如果通知用戶事件處理的進度,是否處理完成,所以最好在處理的過程中給用戶一提示,標明處理的進度信息。這種提示可以用進度條的信息來表示出來,以下就是一個用進度條來標示事件進度的一個簡單實例,這個例子中還使用了Observer模式
    進度窗口:
    package pro;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Observable;
    import java.util.Observer;

    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;

    public class Progress extends javax.swing.JDialog implements ActionListener {
        
    /**
         * 
         
    */

        
    private static final long serialVersionUID = 1L;

        
    private JProgressBar pro_JPB;

        
    private JPanel btn_JP;

        
    private JButton cancel_JB;

        
    private JLabel show_JL;

        NewJFrame jf;

        
    public Progress(NewJFrame frame) {
            
    super(frame, true);
            
    this.jf = frame;
            initGUI();
        }


        set se 
    = new set();

        
    private void initGUI() {
            
    try {

                se.addObserver(
    new setObserver());
                BorderLayout thisLayout 
    = new BorderLayout();
                getContentPane().setLayout(thisLayout);
                
    {
                    show_JL 
    = new JLabel();
                    getContentPane().add(show_JL, BorderLayout.NORTH);
                    show_JL.setPreferredSize(
    new java.awt.Dimension(35422));
                }

                
    {
                    pro_JPB 
    = new JProgressBar();
                    pro_JPB.setMinimum(
    0);
                    pro_JPB.setMaximum(
    100);
                    getContentPane().add(pro_JPB, BorderLayout.CENTER);
                    pro_JPB.setPreferredSize(
    new java.awt.Dimension(39227));
                }

                
    {
                    btn_JP 
    = new JPanel();
                    getContentPane().add(btn_JP, BorderLayout.SOUTH);
                    
    {
                        cancel_JB 
    = new JButton();
                        btn_JP.add(cancel_JB);
                        cancel_JB.setText(
    "\u53d6\u6d88");
                        cancel_JB.addActionListener(
    this);
                    }

                }

                
    this.setBackground(Color.DARK_GRAY.brighter());
                
    this.setUndecorated(true);
                
    this.setSize(39290);
                
    this.setLocationRelativeTo(null);
            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }


        
    public void setMinmum(int i) {
            pro_JPB.setMinimum(i);
        }


        
    public void setMaxmem(int i) {
            pro_JPB.setMaximum(i);
        }


        
    public void setVal(int i) {
            se.setPrice(i);
        }


        
    /**
         * 
         * set Class->function:觀察者模式的具體應用
         * 2007-4-17
         
    */

        
    class set extends Observable {
            
    private int price;

            
    public int getPrice() {
                
    return price;
            }


            
    public void setPrice(int price) {
                
    this.price = price;
                setChanged();
                notifyObservers(
    new Integer(price));
            }


        }


        
    class setObserver implements Observer {
            
    public void update(Observable obj, Object arg) {
                
    if (arg instanceof Integer) {
                    
    int i = ((Integer) arg).intValue();
                    pro_JPB.setValue(i);
                    show_JL.setText((i 
    - pro_JPB.getMinimum()) * 100
                            
    / (float) (pro_JPB.getMaximum() - pro_JPB.getMinimum())
                            
    + "%");
                }

            }


        }


        
    public void actionPerformed(ActionEvent e) {
            jf.setTh_Flag(
    false);
            
    this.setVisible(false);
        }


    }


    主程序:
    package pro;

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;

    public class NewJFrame extends javax.swing.JFrame {
        
    /**
         * 
         
    */

        
    private static final long serialVersionUID = 1L;

        
    private JPanel cen_JP;

        
    private JButton jb;

        
    public static void main(String[] args) {
            NewJFrame inst 
    = new NewJFrame();
            inst.setVisible(
    true);
        }


        
    public NewJFrame() {
            
    super();
            initGUI();
        }


        Progress pro;

        
    private void initGUI() {
            
    try {
                setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                
    {
                    cen_JP 
    = new JPanel();
                    getContentPane().add(cen_JP, BorderLayout.CENTER);
                    
    {
                        jb 
    = new JButton();
                        cen_JP.add(jb);
                        jb.setText(
    "jButton1");
                        jbAction ja 
    = new jbAction();
                        pro 
    = new Progress(this);
                        jb.addActionListener(ja);
                    }

                }

                pack();
                setSize(
    400300);
            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }


        
    boolean th_Flag = true;

        
    class jbAction implements ActionListener {
            
    public void actionPerformed(ActionEvent e) {
                pro.setMaxmem(
    100);
                pro.setMinmum(
    0);
                
    new Thread() {
                    
    public void run() {
                        
    for (int i = 1; i < 100; i++{
                            
    if (!isTh_Flag()) {
                                setTh_Flag(
    true);

                                
    break;
                            }

                            
    try {
                                Thread.sleep(
    1000);
                            }
     catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                            pro.setVal(i);
                            System.out.println(
    "===" + i);
                        }

                    }

                }
    .start();
                pro.setVal(
    0);
                pro.setVisible(
    true);
            }


        }


        
    public boolean isTh_Flag() {
            
    return th_Flag;
        }


        
    public void setTh_Flag(boolean th_Flag) {
            
    this.th_Flag = th_Flag;
        }

    }


    發現了一個1.5的新特性
    如果傳給dialog一個組件參數Com后,無論是否是模態都顯示在Com之上
    posted on 2007-04-17 11:44 aaabbb 閱讀(3029) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 两性色午夜免费视频| 久久久高清日本道免费观看| 亚洲精品NV久久久久久久久久| 韩国免费a级作爱片无码| 亚洲精品无码久久毛片波多野吉衣 | 操美女视频免费网站| 黄色毛片免费在线观看| 久久亚洲AV午夜福利精品一区| 好先生在线观看免费播放| 一出一进一爽一粗一大视频免费的| 亚洲国产女人aaa毛片在线| 麻豆国产人免费人成免费视频 | 四虎影院免费在线播放| 中文在线观看永久免费| 久久综合久久综合亚洲| 久久久久亚洲精品天堂久久久久久| 四虎最新永久免费视频| 无码精品人妻一区二区三区免费| 亚洲精品午夜视频| 亚洲日韩精品无码专区网站| 成人免费在线看片| 久久国产美女免费观看精品| 亚洲人成电影网站| 亚洲女久久久噜噜噜熟女| 免费无码又爽又刺激高潮| 一级毛片免费视频| 一级黄色免费网站| 亚洲国产精品精华液| 亚洲精品在线网站| 亚洲成AV人片在线观看WWW| 免费一级肉体全黄毛片| 精品久久8x国产免费观看| 国产乱子伦精品免费视频| 亚洲精品久久久久无码AV片软件| 亚洲色偷偷av男人的天堂| 中文亚洲AV片在线观看不卡| 国产一级淫片a视频免费观看| 午夜性色一区二区三区免费不卡视频 | 一级毛片全部免费播放| 久久久久久国产a免费观看不卡| 亚洲精品自偷自拍无码|