还有,我如何得到这些Checkbox的状态呢?

解决方案 »

  1.   

    写一个CheckCellRenderer,如下:import javax.swing.JCheckBox;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.border.Border;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JTable;
    import java.awt.Component;
    import javax.swing.UIManager;
    public 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;
      }
    }把上面你的代码MultiRenderer换成CheckCellRenderer(只能是你用CheckBox的那列)。
      

  2.   

    非常感谢: esunboy(天使联盟) ,我按您的提示把握原来的MultiRenderer换成了您的CheckCellRenderer,只是去掉了”public class CheckCellRenderer extends JCheckBox implements TableCellRenderer“中的“public ”,然后由於我首列字段是字符型的”True“,"false",不是boolean类型,所以我修改了一下你的类,如下:
    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());
        }    if (value.toString().equals("false")) {
            //Boolean b = false;
            setSelected(true);
        }
        else if (value.toString().equals("true")){
             setSelected(false);
        }
       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;
      }
    }然而问题还是如故,真不知道为什么。可能有其它方面的原因,您如果有空可以看看这个贴子,谢谢。
    http://expert.csdn.net/Expert/topic/2662/2662115.xml?temp=8.784121E-02