夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            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用于通知感興趣的參與者事件源中的狀態已發生更改 */
              private ChangeEvent changeEvent = new ChangeEvent(this);
             
              /**
               *<ul>
               *<li>Description:[構造方法]</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,都是調用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,是因為一個為CellEditorListener.class(Class對象),
                          // 接著的是一個CellEditorListener的實例
                          listener = (CellEditorListener) listeners[i + 1];
                          // 讓changeEvent去通知編輯器已經結束編輯
                          // 在editingStopped方法中,JTable調用getCellEditorValue()取回單元格的值,
                          // 并且把這個值傳遞給TableValues(TableModel)的setValueAt()
                          listener.editingStopped(changeEvent);
                      }
                  }
              }
             
              public void cancelCellEditing()
              {}
             
              /**
               * 編輯其中一個單元格,再點擊另一個單元格時,調用。
               */
              public boolean stopCellEditing()
              {
                  // 可以注釋掉下面的fireEditingStopped();然后在GenderEditor的構造函數中把
                  // addActionListener()的注釋去掉(這時請求終止編輯操作從JComboBox獲得),
                  // System.out.println("編輯其中一個單元格,再點擊另一個單元格時,調用。");
                  // 請求終止編輯操作從JTable獲得
                  fireEditingStopped();
                  return true;
              }
             
              /**
               * 為一個單元格初始化編輯時,getTableCellEditorComponent被調用
               */
              public Component getTableCellEditorComponent(JTable table, Object value,
                      boolean isSelected, int row, int column)
              {
                  String s = String.valueOf(value);
                  setSelectedItem(s);
                  return this;
              }
             
              /**
               * 詢問編輯器它是否可以使用 anEvent 開始進行編輯。
               */
              public boolean isCellEditable(EventObject anEvent)
              {
                  return true;
              }
             
              /**
               * 如果應該選擇正編輯的單元格,則返回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
          主站蜘蛛池模板: 西城区| 滁州市| 南京市| 筠连县| 富源县| 资讯 | 勐海县| 曲麻莱县| 芦山县| 收藏| 合肥市| 思南县| 德江县| 紫阳县| 黄骅市| 三门县| 株洲县| 平武县| 卫辉市| 增城市| 济阳县| 崇明县| 枣强县| 那曲县| 修水县| 车致| 南阳市| 丽水市| 两当县| 徐州市| 崇州市| 繁昌县| 遂溪县| 融水| 依安县| 昆山市| 象州县| 景泰县| 惠安县| 余干县| 招远市|