private JTable table = new JTable() {
DrawingCellEditor ce = new DrawingCellEditor();
public TableCellEditor getCellEditor(int row, int column) {
if (getColumnName(column).equals("Sign for quantity"))
return ce;
else
return super.getCellEditor(row, column);
}
};
private class DrawingCellEditor
extends AbstractCellEditor
implements TableCellEditor {
public DrawingCellEditor(){
jcmb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
stopCellEditing();
}
});
} JComboBox jcmb = new JComboBox();
Integer zero = new Integer(0);
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column) {
Object obj = table.getValueAt(row, 1); if (obj != null && obj instanceof Integer) {
int max = ((Integer)obj).intValue();
jcmb.removeAllItems();
for (int i = 0; i <= max; i++) {
jcmb.addItem(new Integer(i));
}
jcmb.setSelectedItem(value);
}
else {
jcmb.removeAllItems();
jcmb.addItem(zero);
jcmb.setSelectedItem(zero);
} return jcmb;
} public boolean stopCellEditing() {
value = jcmb.getSelectedItem();
return super.stopCellEditing();
} Object value; public Object getCellEditorValue() {
return value;
}
}
DrawingCellEditor ce = new DrawingCellEditor();
public TableCellEditor getCellEditor(int row, int column) {
if (getColumnName(column).equals("Sign for quantity"))
return ce;
else
return super.getCellEditor(row, column);
}
};
private class DrawingCellEditor
extends AbstractCellEditor
implements TableCellEditor {
public DrawingCellEditor(){
jcmb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
stopCellEditing();
}
});
} JComboBox jcmb = new JComboBox();
Integer zero = new Integer(0);
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column) {
Object obj = table.getValueAt(row, 1); if (obj != null && obj instanceof Integer) {
int max = ((Integer)obj).intValue();
jcmb.removeAllItems();
for (int i = 0; i <= max; i++) {
jcmb.addItem(new Integer(i));
}
jcmb.setSelectedItem(value);
}
else {
jcmb.removeAllItems();
jcmb.addItem(zero);
jcmb.setSelectedItem(zero);
} return jcmb;
} public boolean stopCellEditing() {
value = jcmb.getSelectedItem();
return super.stopCellEditing();
} Object value; public Object getCellEditorValue() {
return value;
}
}
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class ColumnModelTest{
public ColumnModelTest() {
JFrame f = new JFrame();
MyTable mt=new MyTable();
JTable t=new JTable(mt);
JComboBox c = new JComboBox();
c.addItem("Taipei");
c.addItem("ChiaYi");
c.addItem("HsinChu");
t.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));
t.setPreferredScrollableViewportSize(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("ColumnModelTest");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public static void main(String args[]) {
new ColumnModelTest();
}
}class MyTable extends AbstractTableModel{ Object[][] p = {
{"阿呆", "Taipei",new Integer(66),
new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
{"阿瓜", "ChiaYi",new Integer(85),
new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},
}; String[] n = {"姓名",
"居住地",
"语文",
"数学",
"总分",
"及格",
"作弊"};
public int getColumnCount() {
return n.length;
} public int getRowCount() {
return p.length;
} public String getColumnName(int col) {
return n[col];
} public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public void setValueAt(Object value, int row, int col) {
p[row][col] = value;
fireTableCellUpdated(row, col);
}
}
是要实现这个吗??