自定义TABLE MODAL,列的类定义为boolean类型

解决方案 »

  1.   

    我的以下函数定义对吗? public Class getColumnClass(int column) {
    switch(column) {
    case 0:
    return boolean.class;
    case 1:
    return String.class;
    case 2:
    return String.class;
    case 3:
    return String.class;
    default:
    return Object.class;
    }
    }如何追加一条纪录?
      

  2.   

    定义得非常正确
    追加纪录你在TABLE MODAL里追加就是了,然后重画一下或者用那个叫fire什么的函数啊
      

  3.   

    不行。
    我追加后,第一列的如果追加bool型,则出错。请告诉我如何追加?
      

  4.   

    你自己写一个CellRenderer和CellEditor就行了
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.io.*;import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.table.*;public class JTest extends JFrame
    {
      protected JTable m_table;
      protected TableData m_data;  public JTest() {
        super("Expense Report");
        setSize(200, 200);    m_data = new TableData();    m_table = new JTable();
        m_table.setAutoCreateColumnsFromModel(false);
        m_table.setModel(m_data);
        m_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    TableCellRenderer renderer = new CheckCellRenderer();
        TableCellEditor editor = new DefaultCellEditor(new JCheckBox());
        TableColumn column = new TableColumn(0,30,renderer, editor);
        m_table.addColumn(column);    renderer = new DefaultTableCellRenderer();
        editor = new DefaultCellEditor(new JTextField());
        column = new TableColumn(1,180,renderer, editor);
        m_table.addColumn(column);    JTableHeader header = m_table.getTableHeader();
        header.setUpdateTableInRealTime(false);    JScrollPane ps = new JScrollPane();
        ps.setSize(220, 220);
        ps.getViewport().add(m_table);
        getContentPane().add(ps, BorderLayout.CENTER);    WindowListener wndCloser = new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        };
        addWindowListener(wndCloser);    setVisible(true);
      }
      public static void main(String argv[]) {
        new JTest();
      }
    }class CheckCellRenderer extends JCheckBox implements TableCellRenderer
    {
      protected static Border m_noFocusBorder;  public CheckCellRenderer() {
        super();
        m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
        setOpaque(true);
        setBorder(m_noFocusBorder);
      }  public Component getTableCellRendererComponent(JTable table,
       Object value, boolean isSelected, boolean hasFocus,
       int row, int column)
      {
        if (value instanceof Boolean) {
          Boolean b = (Boolean)value;
          setSelected(b.booleanValue());
        }    setBackground(isSelected && !hasFocus ?
          table.getSelectionBackground() : table.getBackground());
        setForeground(isSelected && !hasFocus ?
          table.getSelectionForeground() : table.getForeground());    setFont(table.getFont());
        setBorder(hasFocus ? UIManager.getBorder(
          "Table.focusCellHighlightBorder") : m_noFocusBorder);    return this;
      }
    }class TableData extends AbstractTableModel
    {
      protected Vector m_vector;  public TableData() {
        m_vector = new Vector();
        setDefaultData();
      }  public void setDefaultData() {
        m_vector.removeAllElements();
        for(int i=0;i<5;i++)
        {
          Vector v=new Vector();
          v.add(new Boolean(false));
          v.add(String.valueOf(i));
          m_vector.addElement(v);
        }
      }  public int getRowCount() {
        return m_vector==null ? 0 : m_vector.size();
      }  public int getColumnCount() {
        return 2;
      }  public String getColumnName(int column) {
        if(column==0)
          return "选择";
        else
          return "列"+(column-1);
      }  public boolean isCellEditable(int nRow, int nCol) {
        return true;
      }  public Object getValueAt(int nRow, int nCol) {
        Vector record=(Vector)m_vector.elementAt(nRow);
        return record.elementAt(nCol);
      }  public void setValueAt(Object value, int nRow, int nCol) {
        Vector record=(Vector)m_vector.elementAt(nRow);
        record.setElementAt(value,nCol);
      }  public void insert(int row) {
        if (row < 0)
          row = 0;
        if (row > m_vector.size())
          row = m_vector.size();
        Vector v=new Vector();
        v.addElement(new Boolean(false));
        v.addElement(new String(""));
        m_vector.insertElementAt(v,row);
      }  public boolean delete(int row) {
        if (row < 0 || row >= m_vector.size())
          return false;
        m_vector.remove(row);
          return true;
      }
    }
      

  6.   

    to   xiaoxi777(小溪)非常感谢,请你用语言描述一下 TableCellRenderer
                               TableCellEditor
                               TableColumn谢谢
      

  7.   

    你自己看看
    http://manning.spindoczine.com/sbe/files/uts2/Chapter18html/Chapter18.htm