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

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

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

    waysun一路陽光

    不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks

    收藏自:http://blog.csdn.net/djsl6071/archive/2007/04/23/1576681.aspx
    適合使用環境: 當自身發生改變時,通知其它對象,其他對象會跟著改變。例如:swing中分頁的程序,當你點擊上一頁下一頁時需要重新激發事件,從數據庫獲得新數據時,等。

    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;
        }

    }

    posted on 2009-10-12 09:49 weesun一米陽光 閱讀(549) 評論(0)  編輯  收藏 所屬分類: 23種編程模式
    主站蜘蛛池模板: 一级黄色免费毛片| 无人影院手机版在线观看免费 | 亚洲精品无码鲁网中文电影| 野花香高清视频在线观看免费 | 亚洲精品一二三区| 四虎影视永久免费视频观看| 一级做a爰全过程免费视频毛片| 久久精品国产亚洲av麻豆| 最近中文字幕免费mv视频8| 深夜福利在线视频免费| 亚洲春色在线视频| 成人免费网站在线观看| 一区二区三区免费看| 亚洲最大视频网站| 免费va人成视频网站全| 99re6在线视频精品免费下载| 亚洲人成人伊人成综合网无码| 亚洲色成人中文字幕网站| 天天天欲色欲色WWW免费| 中国国语毛片免费观看视频| 亚洲中文字幕久久精品无码VA| 亚洲一区爱区精品无码| 免费观看成人毛片a片2008| 不卡视频免费在线观看| 亚洲AV综合色区无码二区爱AV| 亚洲日韩欧洲乱码AV夜夜摸| 成年美女黄网站18禁免费| 国产免费拔擦拔擦8X高清在线人| 亚洲女子高潮不断爆白浆| 久久久久亚洲Av无码专| yy6080亚洲一级理论| 西西大胆无码视频免费| 久久免费福利视频| 九一在线完整视频免费观看| 亚洲一卡2卡4卡5卡6卡在线99 | 免费在线黄色电影| 亚洲精品自产拍在线观看动漫| 黄色毛片免费网站| 免费日韩在线视频| 成年大片免费视频播放一级 | 久久国产亚洲精品|