夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          /**
           * <ul>
           * <li>Title:[FileFieldEditor]</li>
           * <li>Description: [JTable可編輯]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2012-12-6]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * @version 1.0 
           */
          @SuppressWarnings("serial")
          public class FileFieldEditor extends JComboBox implements TableCellEditor
          {
             
              /** EventListenerList:保存EventListener 列表的類 */
              private EventListenerList listenerList = new EventListenerList();
             
              /** ChangeEvent用于通知感興趣的參與者事件源中的狀態(tài)已發(fā)生更改 */
              private ChangeEvent changeEvent = new ChangeEvent(this);
             
              /**
               *<ul>
               *<li>Description:[構(gòu)造方法]</li>
               *<ul>
               */
              public FileFieldEditor(String[] fileFields)
              {
                  super();
                  for(String fileField : fileFields)
                  {
                      this.addItem(fileField);
                  }
                  // 請求終止編輯操作可以包含單元格的JTable收到,也可以從編輯器組件本身(如這里的JComboBox)獲得
                  /*
                   * addActionListener(newActionListener(){ publicvoid
                   * actionPerformed(ActionEvent e) {
                   * System.out.println("ActionListener");
                   * //如同stopCellEditing,都是調(diào)用fireEditingStopped()方法 fireEditingStopped(); }
                   * });
                   */
              }
             
              public void addCellEditorListener(CellEditorListener l)
              {
                  listenerList.add(CellEditorListener.class, l);
              }
             
              public void removeCellEditorListener(CellEditorListener l)
              {
                  listenerList.remove(CellEditorListener.class, l);
              }
             
              private void fireEditingStopped()
              {
                  CellEditorListener listener;
                  Object[] listeners = listenerList.getListenerList();
                  for (int i = 0; i < listeners.length; i++)
                  {
                      if (listeners[i] == CellEditorListener.class)
                      {
                          // 之所以是i+1,是因?yàn)橐粋€(gè)為CellEditorListener.class(Class對象),
                          // 接著的是一個(gè)CellEditorListener的實(shí)例
                          listener = (CellEditorListener) listeners[i + 1];
                          // 讓changeEvent去通知編輯器已經(jīng)結(jié)束編輯
                          // 在editingStopped方法中,JTable調(diào)用getCellEditorValue()取回單元格的值,
                          // 并且把這個(gè)值傳遞給TableValues(TableModel)的setValueAt()
                          listener.editingStopped(changeEvent);
                      }
                  }
              }
             
              public void cancelCellEditing()
              {}
             
              /**
               * 編輯其中一個(gè)單元格,再點(diǎn)擊另一個(gè)單元格時(shí),調(diào)用。
               */
              public boolean stopCellEditing()
              {
                  // 可以注釋掉下面的fireEditingStopped();然后在GenderEditor的構(gòu)造函數(shù)中把
                  // addActionListener()的注釋去掉(這時(shí)請求終止編輯操作從JComboBox獲得),
                  // System.out.println("編輯其中一個(gè)單元格,再點(diǎn)擊另一個(gè)單元格時(shí),調(diào)用。");
                  // 請求終止編輯操作從JTable獲得
                  fireEditingStopped();
                  return true;
              }
             
              /**
               * 為一個(gè)單元格初始化編輯時(shí),getTableCellEditorComponent被調(diào)用
               */
              public Component getTableCellEditorComponent(JTable table, Object value,
                      boolean isSelected, int row, int column)
              {
                  String s = String.valueOf(value);
                  setSelectedItem(s);
                  return this;
              }
             
              /**
               * 詢問編輯器它是否可以使用 anEvent 開始進(jìn)行編輯。
               */
              public boolean isCellEditable(EventObject anEvent)
              {
                  return true;
              }
             
              /**
               * 如果應(yīng)該選擇正編輯的單元格,則返回true,否則返回 false。
               */
              public boolean shouldSelectCell(EventObject anEvent)
              {
                  return true;
              }
             
              /**
               * 返回值傳遞給TableValue(TableModel)中的setValueAt()方法
               */
              public Object getCellEditorValue()
              {
                  return this.getSelectedItem().toString();
              }
          }
          posted on 2012-12-08 23:12 HUIKK 閱讀(586) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 平利县| 阿拉尔市| 竹山县| 横山县| 出国| 项城市| 葫芦岛市| 临沂市| 永寿县| 荣成市| 花垣县| 乌恰县| 平乡县| 临夏市| 奎屯市| 清流县| 万安县| 常德市| 成都市| 永平县| 永福县| 保山市| 六枝特区| 惠州市| 古丈县| 富阳市| 绥棱县| 大洼县| 满洲里市| 舒城县| 娄烦县| 禄丰县| 灵宝市| 图们市| 临海市| 镇远县| 陈巴尔虎旗| 孝义市| 金秀| 浙江省| 烟台市|