我先要在单元格中显示JComboBox,也不能。//SimpleTableFrame.java
//Demo the simple usage of JTableimport javax.swing.*;
import javax.swing.table.*;public class SimpleTableFrame extends JFrame {
JTable table;
  public SimpleTableFrame() {
      AbstractTableModel dataModel = new AbstractTableModel() {
        public int getColumnCount() { return 10; }
        public int getRowCount() { return 10;}
        public Object getValueAt(int row, int col) { return new Integer(row*col); }
      };      table = new JTable(dataModel);
  TableColumn column1 = table.getColumnModel().getColumn(1);
  String[] str1 = {"one", "two", "three"};
  JComboBox comboBox = new JComboBox(str1);
      column1.setCellEditor(new DefaultCellEditor(comboBox));      JScrollPane scrollpane = new JScrollPane(table);
  
      this.getContentPane().add(scrollpane);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setSize(400,200);
      this.setVisible(true);
  }  public static void main(String[] args) {
    SimpleTableFrame simpleTableFrame = new SimpleTableFrame();
  }
}

解决方案 »

  1.   

    性别的例子,使用方法如下:
       TableColumnModel tcm = table.getColumnModel();
       TableColumn tc = tcm.getColumn(genderColumn);// genderColumn为你的性别的例序号。
       tc.setCellRenderer(new GenderRenderer());
       tc.setCellEditor(new GenderEditor());
    限制如下,该列类型为boolean。/**
     * GenderEditor.java
     */
    import java.awt.Component;
    import java.util.EventObject;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;public class GenderEditor extends JComboBox implements TableCellEditor {  protected EventListenerList listenerList = new EventListenerList();
      protected ChangeEvent changeEvent = new ChangeEvent(this);  public GenderEditor() {
        super();
        addItem("Male");
        addItem("Female");
        addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            fireEditingStopped();
          } 
        });
      }  public void addCellEditorListener(CellEditorListener listener) {
        listenerList.add(CellEditorListener.class, listener);
      }   public void removeCellEditorListener(CellEditorListener listener) {
        listenerList.remove(CellEditorListener.class, listener);
      }   protected void fireEditingStopped() {
        CellEditorListener listener;
        Object[] listeners = listenerList.getListenerList();
        for (int i = 0; i < listeners.length; i++) {
          if (listeners[i] == CellEditorListener.class) {
            listener = (CellEditorListener)listeners[i + 1];
            listener.editingStopped(changeEvent);
          } 
        } 
      }   protected void fireEditingCanceled() {
        CellEditorListener listener;
        Object[] listeners = listenerList.getListenerList();
        for (int i = 0; i < listeners.length; i++) {
          if (listeners[i] == CellEditorListener.class) {
            listener = (CellEditorListener)listeners[i + 1];
            listener.editingCanceled(changeEvent);
          } 
        } 
      }   public void cancelCellEditing() {
        fireEditingCanceled();
      }   public boolean stopCellEditing() {
        fireEditingStopped();
        return true;
      }   public boolean isCellEditable(EventObject event) {
        return true;
      }   public boolean shouldSelectCell(EventObject event) {
        return true;
      }   public Object getCellEditorValue() {
        return new Boolean(getSelectedIndex() == 0 ? true : false);
      }   public Component getTableCellEditorComponent(JTable table, 
              Object value, boolean isSelected, int row, int column) {
        boolean isMale = ((Boolean)value).booleanValue();
        setSelectedIndex(isMale ? 0 : 1);
        return this;
      } }
    /**
     * GenderRender.java
     */
    import java.awt.Component;
    import javax.swing.JComboBox;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;public class GenderRenderer extends JComboBox implements TableCellRenderer {  public GenderRenderer() {
        super();
        addItem("Male");
        addItem("Female");
      }  public Component getTableCellRendererComponent(JTable table, 
              Object value, boolean isSelected, boolean hasFocus, 
              int row, int column) {    if (isSelected) {
          setForeground(table.getSelectionForeground());
          super.setBackground(table.getSelectionBackground());
        } else {
          setForeground(table.getForeground());
          setBackground(table.getBackground());
        }     boolean isMale = ((Boolean)value).booleanValue();
        setSelectedIndex(isMale ? 0 : 1);
        return this;
      } }
      

  2.   

    总而言之,一个Renderer(渲染器),是管外观的;一个Editor(修改器),管修改的。呵呵。
      

  3.   

    我在继承TableCellRenderer时继承JComboBox,在声明AbstractTableModel的时候没有重载  boolean isCellEditable(int row, int col) 方法。
    一个人摸索真的很难搞定,有人帮忙就快多了,多谢楼上诸位了!