JDK自带的有这样的例子。路径如:C:\j2sdk1.4.1\demo\jfc\SwingSet2

解决方案 »

  1.   

    例如要把第一列的单元格变为JComboBoxJTable tbl
    JComboBox cmbtbl.getColumnModel().getColumn(1).setCellEditor(
                    new DefaultCellEditor(cmb));
      

  2.   

    实现TableCellRenderer接口。在它的getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column)方法中,加入:
    if(row == 0 && column == 0) 
      return new JComboBox();
      

  3.   

    http://www2.gol.com/users/tame/swing/examples/SwingExamples.html/* (swing1.1.1) jfc#91 */
    package jp.gr.java_conf.tame.swing.table;import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;/**
      * each row TableCellEditor
      *
      * @version 1.1 09/09/99
      * @author Nobuo Tamemasa
      */public class EachRowEditor implements TableCellEditor {
      protected Hashtable editors;
      protected TableCellEditor editor, defaultEditor;
      JTable table;  /**
       * Constructs a EachRowEditor.
       * create default editor 
       *
       * @see TableCellEditor
       * @see DefaultCellEditor
       */ 
      public EachRowEditor(JTable table) {
        this.table = table;
        editors = new Hashtable();
        defaultEditor = new DefaultCellEditor(new JTextField());
      }
      
      /**
       * @param row    table row
       * @param editor table cell editor
       */
      public void setEditorAt(int row, TableCellEditor editor) {
        editors.put(new Integer(row),editor);
      }
      
      public Component getTableCellEditorComponent(JTable table,
          Object value, boolean isSelected, int row, int column) {
        //editor = (TableCellEditor)editors.get(new Integer(row));
        //if (editor == null) {
        //  editor = defaultEditor;
        //}
        return editor.getTableCellEditorComponent(table,
                 value, isSelected, row, column);
      }  public Object getCellEditorValue() {
        return editor.getCellEditorValue();
      }
      public boolean stopCellEditing() {
        return editor.stopCellEditing();
      }
      public void cancelCellEditing() {
        editor.cancelCellEditing();
      }
      public boolean isCellEditable(EventObject anEvent) {
        selectEditor((MouseEvent)anEvent);
        return editor.isCellEditable(anEvent);
      }
      public void addCellEditorListener(CellEditorListener l) {
        editor.addCellEditorListener(l);
      }
      public void removeCellEditorListener(CellEditorListener l) {
        editor.removeCellEditorListener(l);
      }
      public boolean shouldSelectCell(EventObject anEvent) {
        selectEditor((MouseEvent)anEvent);
        return editor.shouldSelectCell(anEvent);
      }
      
      protected void selectEditor(MouseEvent e) {
        int row;
        if (e == null) {
          row = table.getSelectionModel().getAnchorSelectionIndex();
        } else {
          row = table.rowAtPoint(e.getPoint());
        }
        editor = (TableCellEditor)editors.get(new Integer(row));
        if (editor == null) {
          editor = defaultEditor;
        }
      }
    }
      /* (swing1.1.1) */
    //package jp.gr.java_conf.tame.swing.examples;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import jp.gr.java_conf.tame.swing.table.*;/**
     * @version 1.1 09/09/99
     */
    public class EachRowEditorExample extends JFrame {
      public EachRowEditorExample(){
        super("EachRow Editor Example");
           
        DefaultTableModel dm = new DefaultTableModel();
        dm.setDataVector(
          new Object[][]{{"Name"  ,"MyName"},
                         {"Gender","Male"}},
          new Object[]{"Column1","Column2"});    JTable table = new JTable(dm);
        JComboBox comboBox = new JComboBox();
        comboBox.addItem("Male");
        comboBox.addItem("Female");
        comboBox.addComponentListener(new ComponentAdapter() {
          public void componentShown(ComponentEvent e) {
            final JComponent c = (JComponent)e.getSource();
            SwingUtilities.invokeLater(new Runnable() {
              public void run () {
                c.requestFocus();
                System.out.println(c);
                if (c instanceof JComboBox) {
                  System.out.println("a");
                }
              }
            });
          }
        });    EachRowEditor rowEditor = new EachRowEditor(table);
        rowEditor.setEditorAt(1, new DefaultCellEditor(comboBox));
        table.getColumn("Column2").setCellEditor(rowEditor);    JScrollPane scroll = new JScrollPane(table);
        getContentPane().add( scroll , BorderLayout.CENTER);
        setSize( 400, 100 );
        setVisible(true);
      }  public static void main(String[] args) {
        EachRowEditorExample frame = new EachRowEditorExample();
        frame.addWindowListener( new WindowAdapter() {
          public void windowClosing( WindowEvent e ) {
            System.exit(0);
          }
        });
      }
    }