/**
* <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();
}
}
* <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();
}
}