网上看到很多关于这个问题的答案,都说什么要实例化两个接口,感觉都说的很模糊,没有例子,我想要一个简单的例子,麻烦各位高手了。
要求:一个10行6列的在JFRAME中的JTABLE,要求第一排是一行JCHEKBOX!JCHEKBOX要求是可以点的!

解决方案 »

  1.   

       TableColumnModel columnModel = table.getColumnModel();
       TableColumn stateColumn = columnModel.getColumn(stateIndex);
       stateColumn.setCellEditor(new ComCellEditor(new Object[]{1,2,3}));  class ComCellEditor
          extends AbstractCellEditor implements TableCellEditor {
        JComboBox cobox;
        public ComCellEditor(Object objects[]) {
          cobox = new JComboBox(objects);
        }    public Component getTableCellEditorComponent(JTable table, Object value,
                                                     boolean isSelected,
                                                     int row, int column) {
          cobox.setSelectedItem(value.toString());
          return cobox;
        }    public boolean shouldSelectCell(EventObject anEvent) {
          return true;
        }    public void cancelCellEditing() {
          super.cancelCellEditing();
        }    public boolean isCellEditable(EventObject anEvent) {
          if (anEvent instanceof MouseEvent) {
            return ( (MouseEvent) anEvent).getClickCount() >= 2;
          }
          return true;
        }    public boolean stopCellEditing() {
          super.stopCellEditing();
          return true;
        }    public Object getCellEditorValue() {
          return cobox.getSelectedItem();    }
      }
      

  2.   


    public class TableIncludeCheckbox {
    public TableIncludeCheckbox() {
    // TODO Auto-generated constructor stub
    JFrame frame = new JFrame();

    JTable table = new JTable(2, 2);

    JCheckBox checkbox = new JCheckBox();

    DefaultCellEditor ce = new DefaultCellEditor(checkbox);
    table.getColumnModel().getColumn(0).setCellEditor(ce);

    frame.add(table);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setVisible(true);
    }

    public static void main(String[] args) {
    new TableIncludeCheckbox();
    }
    }
      

  3.   

    不过有一些误区,通常Render用来做表现,而Editor用来做编辑。两者分工不同。尽管有时一些工作两者都可以完成,但是,个人认为还是分开来代码的职责分工较为明确,结构也合理一些。package zjtest;import java.awt.BorderLayout;
    import java.awt.Component;
    import java.util.EventObject;import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;public class CheckBoxTable extends JFrame { private static final long serialVersionUID = 1L; public CheckBoxTable() { JTable jt = new JTable(new AbstractTableModel() { private static final long serialVersionUID = 1L; public int getColumnCount() {
    return 10;
    } public int getRowCount() {
    return 16;
    } public Object getValueAt(int r, int c) {
    if (c == 0) {
    return new Boolean(r % 2 == 0);
    }
    return "";
    } public Class getColumnClass(int c) {
    return c == 0 ? Boolean.class : String.class;
    } public boolean isCellEditable(int row, int col) {
    return true;
    } }); jt.setDefaultRenderer(Boolean.class, new CheckBoxCellRender());
    jt.setDefaultEditor(Boolean.class, new CheckBoxCellEditor()); JScrollPane jsp = new JScrollPane(jt);
    getContentPane().add(jsp, BorderLayout.CENTER);
    pack();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    } public static void main(String args[]) {
    new CheckBoxTable();
    } class CheckBoxCellRender extends JCheckBox implements TableCellRenderer { private static final long serialVersionUID = 1L; public CheckBoxCellRender() {
    super();
    } public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row,
    int col) {
    // System.out.println(value.getClass());
    return this;
    } } class CheckBoxCellEditor extends JCheckBox implements TableCellEditor { private static final long serialVersionUID = 1L; public CheckBoxCellEditor() {
    super();
    } public Component getTableCellEditorComponent(JTable table,
    Object value, boolean isSelected, int row, int col) {
    return this;
    } public void addCellEditorListener(CellEditorListener arg0) { } public void cancelCellEditing() { } public Object getCellEditorValue() {
    return null;
    } public boolean isCellEditable(EventObject arg0) {
    return true;
    } public void removeCellEditorListener(CellEditorListener arg0) {
    } public boolean shouldSelectCell(EventObject arg0) {
    return true;
    } public boolean stopCellEditing() {
    // TODO Auto-generated method stub
    return true;
    } }}简单实现,没什么实际意义。希望对你有所帮助。
      

  4.   


    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Rectangle;
    import java.util.EventObject;
    import java.util.Vector;import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;public class table_rowCheckBOX {
        Vector vec_row1 = new Vector();
        Vector vec_row2 = new Vector();
        Vector data = new Vector();
        Vector vec_column = new Vector();
        JTable table;
        JScrollPane  jsp;
        MyTableModel table_partModel;

        public table_rowCheckBOX() {
        
         vec_row1.add("");
            vec_row1.add("");
            vec_row1.add("");
            vec_row2.add("");
            vec_row2.add("");
            vec_row2.add("");
            data.add(vec_row1);
            data.add(vec_row2);
            vec_column.add("1");
            vec_column.add("2");
            vec_column.add("3");
            table_partModel=new MyTableModel(data,vec_column);
        
            JFrame frame = new JFrame();
            frame.setLayout(null);
            table = new JTable(table_partModel);
            MyRender renderer1 = new MyRender();
            table.setDefaultRenderer(Object.class, renderer1);
            jsp = new JScrollPane();
            jsp.getViewport().add(table,null);
    jsp.setBounds(new Rectangle(10,10,200,200));
    frame.add(jsp,null);
          
            MyEditor editor1 = new MyEditor();
            table.setDefaultEditor(Object.class,editor1);
            
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setVisible(true);
        }
        
        class MyRender implements TableCellRenderer{ public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row,int col) {
    if (row == 0){
    return new JCheckBox();
    }
    else 
    return null;
    }
        }
     
    class MyTableModel extends DefaultTableModel{

    public MyTableModel(Vector data,Vector columns){
     super(data,columns);
    }
    public boolean isCellEditable(int row,int column){
     return true;
    }
        public Class getColumnClass(int col) {
          return Object.class;
        }
    }

    class MyEditor implements TableCellEditor{

         public Component getTableCellEditorComponent(JTable table,
         Object value, boolean isSelected, int row, int column) {
        
         if (row == 0){
    return new JCheckBox();
    }
    else 
    return null;
         } public void addCellEditorListener(CellEditorListener l) {

    } public void cancelCellEditing() {
    } public Object getCellEditorValue() {

    return null;
    } public boolean isCellEditable(EventObject anEvent) {

    return true;
    } public void removeCellEditorListener(CellEditorListener l) {
    // TODO Auto-generated method stub

    } public boolean shouldSelectCell(EventObject anEvent) {
    // TODO Auto-generated method stub
    return true;
    } public boolean stopCellEditing() {
    // TODO Auto-generated method stub
    return true;
    }
        }
        
        public static void main(String[] args) {
            new table_rowCheckBOX();
        }
    }