<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲av日韩片在线观看| 一级毛片免费播放| 四虎永久免费地址在线网站| 亚洲人成网站色在线观看| 久久午夜免费视频| 亚洲中文字幕久久无码| 欧美a级成人网站免费| 亚洲永久网址在线观看| 成年大片免费视频| 亚洲国产成人无码AV在线| 四虎影视精品永久免费网站| 国产精品亚洲专区无码WEB| 四虎影库久免费视频| 午夜免费国产体验区免费的 | 男人免费视频一区二区在线观看| 四虎免费久久影院| selaoban在线视频免费精品| 亚洲色婷婷综合久久| 无码人妻精品中文字幕免费| 亚洲国产美女在线观看| 成年女人免费碰碰视频| 手机永久免费的AV在线电影网| 亚洲一区二区三区在线视频 | 亚洲一区精彩视频| 国产亚洲福利一区二区免费看| 免费视频精品一区二区| 国产亚洲日韩在线a不卡| 亚洲毛片网址在线观看中文字幕 | 亚洲午夜久久久久妓女影院| 男人都懂www深夜免费网站| 亚洲日本视频在线观看| 国产成人高清精品免费软件 | 亚洲一区二区三区精品视频 | 亚洲色精品aⅴ一区区三区 | 最近2019中文字幕免费大全5 | 二个人看的www免费视频| 国产a级特黄的片子视频免费| 国产偷国产偷亚洲清高APP| 一级毛片全部免费播放| 亚洲精品国产精品乱码不99| 黄色毛片免费在线观看|