waysun一路陽光

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          公告

          開啟一扇窗,給自己一個舞臺!

          QQ:251218333,82424805
          MSN:CF1504@Hotmail.com
          E-mail:yyk1504@163.com

          �ڷQ���a�K�O�p�ƾ��ڷQ���a�K�O�p�ƾ��ڷQ���a�K�O�p�ƾ��ڷQ���a�K�O�p�ƾ��ڷQ���a�K�O�p�ƾ��ڷQ���a�K�O�p�ƾ�位來訪者

          常用鏈接

          隨筆分類(189)

          隨筆檔案(160)

          文章分類(1)

          AJAX

          搜索

          積分與排名

          最新隨筆

          最新評論

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

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

          進(jìn)度窗口:
          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:觀察者模式的具體應(yīng)用
               * 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一米陽光 閱讀(553) 評論(0)  編輯  收藏 所屬分類: 23種編程模式
          主站蜘蛛池模板: 昌都县| 任丘市| 庆阳市| 定日县| 思茅市| 溧水县| 仲巴县| 定州市| 株洲县| 邢台县| 太和县| 宜丰县| 郓城县| 仁化县| 南川市| 汉源县| 大英县| 平江县| 乐清市| 崇礼县| 大化| 万山特区| 高州市| 内丘县| 济宁市| 锡林浩特市| 贵阳市| 保定市| 汕头市| 文水县| 平塘县| 城市| 九江市| 华阴市| 郎溪县| 湘西| 龙江县| 方正县| 南昌市| 肇庆市| 兴文县|