checkbox不必new CheckBox(),只要自己定义一个Boolean[],里面都是
Boolean对象,true表示选中,false表示不选中,
调用((DefaultTableModel)table.getModel()).setDataVector()
把它放进去。
构造table时getColumnClass()方法这么写:
public Class getColumnClass(int col) {
    Vector v = (Vector)dataVector.elementAt(0);
    return v.elementAt(col).getClass();
}

解决方案 »

  1.   

    那如果是radiobutton呢
    还有我的jtable宽度固定了,每列的宽度可以调整,但调整时其他列的宽度不变,所以出现
    水平滚动条,我想不要水平滚动条,每列的宽度可以调整,但是所有列的宽度=jtable宽度
    请问有简便的方法吗?
      

  2.   

    水平滚动条,是不是来自你的JScrollPane
      

  3.   

    在new JScrollPane时设一下HORIZONTAL_SCROLLBAR_NEVER水平滚动条就不出来了。
    列的宽度可以通过 table.getColumn(ColumnNames[i]).setPreferredWidth(lengh[i]);
    来动态的设。
      

  4.   

    你好,非常感谢你的回答,
    我要的是
    jtable宽度=500
    如果有5列,当把一列的宽度变大,其他4列宽度变小,总宽度和为500
    必须重新设置吗,有没有简单的属性设置一下就行了
    还有那如果是radiobutton等其他控件 如何处理啊
      

  5.   

    关于radiobutton等控件,你要自己实现getTableCellEditorComponent()方法,
    在指定的行列返回你想要的控件。
    我自己写了个最简单的table,列的宽度变化好像没有影响整个table的宽度嘛。
      

  6.   

    哈哈
    那原因我知道了
     jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);原来我设置的是off
    你能不能帮我实现getTableCellEditorComponent()方法,还有我写了选择事件,请问如何获取所在列的值啊
        jg_table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                  JOptionPane.showMessageDialog(null,"asdfasdfasdfasdfasdfasdfasdf") ;
                }
              });
    麻烦你了,初学,帮帮忙,你要加分也可以
      

  7.   

    星期一特别忙,想给你写个例子的,停停写写写了一天,真是不好意思。代码贴出来你看看,
    有些乱,不明白的地方尽管问好了。
    关于TableCellRenderer和TableCellEditor建议你找本书好好看看,最好能够结合
    MVC模式,好好研究会很有收获的哦 :)
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;public class TestTable {
    public static void main(String[] args) {
    MyFrame myFrame = new MyFrame();
    myFrame.setVisible(true);
    }
    }class MyFrame extends JFrame {
    private JPanel m_basePanel;
    private JScrollPane m_scrollPanel;
    private MyTable m_table;
    public MyFrame() {
    init();
    }
    public void init() {
    // create table
    m_table = new MyTable();
    initColumn();
    // create scroll panel
    m_scrollPanel = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
    m_scrollPanel.setViewportView(m_table);
    // create base panel
    m_basePanel = new JPanel();
    m_basePanel.setLayout(new BorderLayout());
    m_basePanel.add(m_scrollPanel);

    // create frame
    setSize(500, 400);

    // add Listener
    getContentPane().add(m_basePanel);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    m_table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    if (m_table.getSelectedRow() != -1) {
    m_table.changeModel(m_table.getSelectedRow());
    m_table.revalidate();
    m_table.repaint();
    }
    }
    });
    }

    public void initColumn() {
    m_table.getColumn("Column1").setCellEditor(new Column1CellEditor());
    m_table.getColumn("Column2").setCellRenderer(new Column2CellRenderer());
    m_table.getColumn("Column2").setCellEditor(new Column2CellEditor());
    }
    }
    abstract class AbstractCellEditor implements TableCellEditor {
    public Object value;
    protected EventListenerList listenerList = new EventListenerList();
    protected ChangeEvent changeEvent = null;
    protected int clickCountToStart = 1;
    public Object getCellEditorValue() {
    return value;
    }
    public void setCellEditorValue(Object value) {
    this.value = value;
    }
    public boolean isCellEditable(EventObject anEvent) {
    if (anEvent instanceof MouseEvent) {
    if (((MouseEvent)anEvent).getClickCount() < clickCountToStart) {
    return false;
    } else {
    return true;
    }
    }
    return false;
    }
    public boolean shouldSelectCell(EventObject anEvent) {
    return true;
    }
    public boolean stopCellEditing() {
    fireEditingStopped();
    return true;
    }
    public void cancelCellEditing() {
    fireEditingCanceled();
    }
    public void addCellEditorListener(CellEditorListener l) {
    listenerList.add(CellEditorListener.class, l);
    }
    public void removeCellEditorListener(CellEditorListener l) {
    listenerList.remove(CellEditorListener.class, l);
    }
    protected void fireEditingStopped() {
    Object[] listeners = listenerList.getListenerList();
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
    if (listeners[i] == CellEditorListener.class) {
    if (changeEvent == null) {
    changeEvent = new ChangeEvent(this);
    }
    ((CellEditorListener)listeners[i + 1]).editingStopped(changeEvent);
    }
    }
    }
    protected void fireEditingCanceled() {
    Object[] listeners = listenerList.getListenerList();
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
    if (listeners[i] == CellEditorListener.class) {
    if (changeEvent == null) {
    changeEvent = new ChangeEvent(this);
    }
    ((CellEditorListener)listeners[i + 1]).editingCanceled(changeEvent);
    }
    }
    }
    }
    class Column1CellEditor extends AbstractCellEditor {
    public Object value;
    JComboBox c;
    public Column1CellEditor() {
    c = new JComboBox();
    c.addItem("1");
    c.addItem("2");
    c.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             setCellEditorValue((String)c.getSelectedItem());
             stopCellEditing();
           }
        });
    }
    public Component getTableCellEditorComponent(JTable table,
    Object value,  boolean isSelected, int row, int col) {
    if (row == 2) {
    return c;
    }
    return null;
          }
           public boolean stopCellEditing() {
    return super.stopCellEditing();
    }
    public Object getCellEditorValue() {
    return value;
    }
    public void setCellEditorValue(Object value) {
    this.value = value;
    }
    }class Column2CellEditor extends AbstractCellEditor {
    public Object value;
    JComboBox c;
    public Column2CellEditor() {
    c = new JComboBox();
    c.addItem("a");
    c.addItem("b");
    }
    public Component getTableCellEditorComponent(JTable table,
    Object value,  boolean isSelected, int row, int column) {
    if (row == 2 && column == 1) {
    return c;
    }
    return null;

          }
           public boolean stopCellEditing() {
    return super.stopCellEditing();
    }
    public Object getCellEditorValue() {
    return value;
    }
    public void setCellEditorValue(Object value) {
    this.value = value;
    }
    }class Column2CellRenderer extends JPanel implements TableCellRenderer {
    JRadioButton r;
    JComboBox c;
    public Column2CellRenderer() {
    setLayout(new BorderLayout());
    r = new JRadioButton();
    c = new JComboBox();
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int col) {
    removeAll();
    if ((row == 0 || row == 1) && col == 1) {
    Boolean b = (Boolean)value;
    add(r, BorderLayout.CENTER);
    if (b.booleanValue()) {
    r.setSelected(true);
    } else {
    r.setSelected(false);
    }
    return this;
    }
    return null;
    }
    }class MyTable extends JTable {
    MyModel tableModel;
    public MyTable() {
    init();
    }
    public boolean isCellEditable(int row, int col) {
    return true;
    }
    public boolean stopCellEditing(boolean isChangeFrame) {
    return true;
    }
    public void init() {
    setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    tableModel = new MyModel();
    setModel(tableModel);
    }
    public void changeModel(int row) {
    tableModel.updateRadio(row);
    }
    }class MyModel extends AbstractTableModel {
    String[] columnNames = {"Column1", "Column2"};
    Object[][] data = {{"radio1", Boolean.FALSE}, {"radio2", Boolean.TRUE}, {"1", Boolean.TRUE}};
    public Object getValueAt(int row, int col) {
    return data[row][col];
    }
    public void setValueAt(Object value, int row, int col) {
    data[row][col] = value;
    fireTableCellUpdated(row, col);
    }
    public int getRowCount() {
    return data.length;
    }
    public int getColumnCount() {
    return columnNames.length;
    }
    public String getColumnName(int col) {
    return columnNames[col];
    }
    public Class getColumnClass(int col) {
    return data[0][col].getClass();
    }
    public void updateRadio(int selRow) {
    if (selRow > 1) return;

    for (int i = 0; i < getRowCount(); i++) {
    data[i][1] = new Boolean(i == selRow);
    }

    }
    }