62,634
社区成员




import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class TableTest extends JFrame
{
private JTable table;
public TableTest(){
String[] array=new String[11];
for(int i=0;i<10;i++)
array[i]=""+(i+1);
array[10]="未选择";
JComboBoxCellEditor editor=new JComboBoxCellEditor(array);
table=new JTable(new Object[][]{{"未选择",1},{"未选择",2},{"未选择",3},{"未选择",4},{"未选择",5},{"未选择",6}},
new Object[]{"Column1","Column2"});
TableColumnModel colModel=table.getColumnModel();
colModel.getColumn(0).setCellEditor(editor);
this.add(new JScrollPane(table),BorderLayout.CENTER);
this.setSize(200,200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new TableTest();
}
class JComboBoxCellEditor extends DefaultCellEditor
{
private Object needRemove=null;//下次点击JComboBox时,需要删除的选项
private Object needAdd=null;//下次点击JComboBox时,需要添加的选项
private Object value;//当前comboBox显示的值
private JComboBox comboBox=null;
public JComboBoxCellEditor(Object[] value){
super(new JComboBox(value));
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column){
if(comboBox==null){//初始化comboBox
comboBox=(JComboBox)super.getTableCellEditorComponent(table, value, isSelected, row, column);
comboBox.addItemListener(new ItemHandler());//添加事件监听
comboBox.setSelectedIndex(10);
}
this.value=value;//当前JComboBox显示的选项
if(needAdd!=null)
comboBox.addItem(needAdd);
if(needRemove!=null)
comboBox.removeItem(needRemove);
return comboBox;
}
private class ItemHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e){
needRemove=comboBox.getSelectedItem();
//当JComboBox显示的选项与用户选择的选项不同时
//需要将原来的显示的选项加入JComoboBox
if(!comboBox.getSelectedItem().equals(value)&&!"未选择".equals(value)){
needAdd=value;
}
else
needAdd=null;
}
}
}
}