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;
        }
    }

解决方案 »

  1.   

    写了一个:
    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);
         }
    }
    是要实现这个吗??