不用这么麻烦
DefaultTableColumnModel dcm = (DefaultTableColumnModel)table.getColumnModel();
TableColumn column = dcm.getColumn(1);
// Use the combo box as the editor in the "Next T" column.
DefaultCellEditor editor = new DefaultCellEditor(jcmbNextT);
column.setCellEditor(editor);

解决方案 »

  1.   

    可是如果我要用JScrollBar 怎么办了?
      

  2.   

    呵呵,改了一点你的程序,现在应该可以了.
    package com.yteng.table;import java.awt.BorderLayout;
    import java.awt.Component;
    import java.util.EventObject;import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.JScrollBar;
    import javax.swing.JScrollPane;
    import javax.swing.JSlider;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableModel;
    public class SwingTable extends JPanel {        public SwingTable(){
                    initComponent();
            }        private void initComponent()
            {
                    JPanel contain = new JPanel();                setLayout(new BorderLayout());
                    JTable table = new JTable();
                    Object data[][] = {{new Integer(100),"China","world"}
                                       ,{new Integer(20),"earth","asdf"}
                                       ,{new Integer(30),"sdsd","uniasdfversal"}
                                       ,{new Integer(40),"earsdsth","asdf"}
                                       ,{new Integer(50),"earth","asdf"}
                                       ,{new Integer(60),"earth","asfsad"}
                                       ,{new Integer(70),"earth","universal"}
                                       ,{new Integer(80),"earth","universal"}
                                       ,{new Integer(90),"earth","asdfasdf"}
                                       ,{new Integer(100),"earth","asdfasdf"}
                                       ,{new Integer(800),"earth",""}
                                       };
                    Object[] column = {"项目A","项目B","项目C"};
                    TheTableModuel moduel = new TheTableModuel(data,column);
                    //table.add
                    table.setModel(moduel);
                    //JTableHeader header = table.getTableHeader();
                table.setDefaultRenderer(Boolean.class,new TheCellRender());
                table.setDefaultEditor(Boolean.class,new TheCellEdit());
                    JScrollPane scrollPanel = new JScrollPane(table);
                    table.setCellSelectionEnabled(false);
                    table.setColumnSelectionAllowed(true);
                    table.setRowSelectionAllowed(true);                add(scrollPanel,BorderLayout.CENTER);
                    //contain.add(scrollPanel);
                    //add(contain,BorderLayout.CENTER);
            }
    }class TheTableModuel extends DefaultTableModel
    {        private Object[][]data;
            private Object[] col;
            private Class colClass[] ={Boolean.class,String.class,String.class};
            public TheTableModuel(Object[][]data,Object col[])
            {
                    super(data,col);
            }
            public Class getColumnClass(int c) { return colClass[c]; }
            public boolean isCellEditable(int row,
                int column)
            {
                    return true;
            }
            public void  setValueAt(Object value, int row, int col){
                super.setValueAt(value, row, col);
            }}class TheCellRender extends JLabel implements TableCellRenderer{
            public TheCellRender()
            {
                    //super(JScrollBar.HORIZONTAL);
            }
            /* (non-Javadoc)
             * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
             */
            public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
                    // TODO Auto-generated method stub                if(arg1 instanceof Integer){
                             setText(((Integer)arg1).toString());
                     }
                    return this;
            }
    }class TheCellEdit extends JComboBox implements TableCellEditor
    {
            //private JScrollBar scroll = new JScrollBar();
            int row;
            int col;
            private Integer cellValue;
            public TheCellEdit()
            {                //super(JScrollBar.HORIZONTAL);
                    //scroll.setMaximum(100);
                    //scroll.setMinimum(0);
                    //scroll.setBlockIncrement(1);
                    //scroll.setOrientation(JScrollBar.HORIZONTAL);
                    for(int i=0;i<1000;i++){
                       addItem(new Integer(i).toString());
                    }        }
            TableModel model = null;
             public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
             {
                 this.row = row;
                 this.col = column;
                     model = table.getModel();
                     if(value instanceof Integer){
                             cellValue = (Integer)value;
                             //scroll.setValue(((Integer)value).intValue());
                             setSelectedItem(cellValue.toString());
                     }
                     return this;
             }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#getCellEditorValue()
             */
            public Object getCellEditorValue() {
                    // TODO Auto-generated method stub
                    cellValue = new Integer((String)this.getSelectedItem());
                    return new Integer((String)this.getSelectedItem());
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#isCellEditable(java.util.EventObject)
             */
            public boolean isCellEditable(EventObject arg0) {
                    // TODO Auto-generated method stub
                    return true;
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#shouldSelectCell(java.util.EventObject)
             */
            public boolean shouldSelectCell(EventObject arg0) {
                    // TODO Auto-generated method stub
                    return true;
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#stopCellEditing()
             */
            public boolean stopCellEditing() {
                    // TODO Auto-generated method stub
                    //setValue(scroll.getValue());
                    model.setValueAt(new Integer((String)this.getSelectedItem()), row, col);
                    return true;
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#cancelCellEditing()
             */
            public void cancelCellEditing() {
                    // TODO Auto-generated method stub
                    cellValue = new Integer((String)this.getSelectedItem());
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#addCellEditorListener(javax.swing.event.CellEditorListener)
             */
            public void addCellEditorListener(CellEditorListener arg0) {
                    // TODO Auto-generated method stub
                    //setValue(scroll.getValue());
            }        /* (non-Javadoc)
             * @see javax.swing.CellEditor#removeCellEditorListener(javax.swing.event.CellEditorListener)
             */
            public void removeCellEditorListener(CellEditorListener arg0) {
                    // TODO Auto-generated method stub        }
    }