本帖最后由 lg_asus 于 2010-07-12 16:44:56 编辑

解决方案 »

  1.   

    我的意思是  把那兩處都注釋的話 new Boolean是以JCheckBox來顯示的
    而不注釋那兩句的話則是以true false字符串來顯示的 
    現在我想用JChcckBox來顯示并且要有背景色
      

  2.   

    因为你将boolean列的渲染器设置为DefaultTableCellRenderer,而DefaultTableCellRenderer返回的单元格组件是JLabel,所以必然不会显示为JCheckBox。
    解决方法就是自己重写TableCellRenderer,getTableCellRendererComponent方法返回一个带有JCheckBox的panel即可。
      

  3.   

    刚才写了一个单元格渲染器class BooleanCellRenderer implements TableCellRenderer
    {
    private JCheckBox checkBox=new JCheckBox();
    public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
    if(value!=null){
    checkBox.setSelected(Boolean.valueOf(value.toString()));
                switch(row%2){
                case 0:
                    checkBox.setBackground(Color.cyan);
                    break;
                case 1:
                    checkBox.setBackground(Color.pink);
                    break;
                default:
                    checkBox.setBackground(Color.yellow);
                    break;
                }
            }
    return checkBox;
    }
    }楼主看能用不
      

  4.   

    先謝了  你這樣寫的只是JCheckBox一種情況  我的數據中還有String  Integer類型啊
    如果要渲染的話還要區別對待?
      

  5.   

    用instanceof可以來判斷類型可以解決if(value instanceof Boolean){
    JCheckBox jck =new JCheckBox();
    jck.setSelected(Boolean.parseBoolean(value.toString()));
    return jck;
    }可是這樣數據的對齊方式不對  
    正常的 String應該左對齊  Integer應該右對齊  Boolean居中,可是這樣做出來的話全部左對齊了  請問如何解決?
      

  6.   

    楼主,9楼说的已经够可以的了,楼主不要只用他的代码,你要把他的代码加上,你不会指望别人把你所有遇到的情况都给你写出来吧,而且你说的那个string,int的,用本身的jlabel不是可以吗?
      

  7.   


    if(value instanceof Boolean){
    JCheckBox jck =new JCheckBox();
    jck.setSelected(Boolean.parseBoolean(value.toString()));
    jck.setHorizontalAlignment(JCheckBox.CENTER);
    return jck;
    }
    if(value instanceof String){
    super.setHorizontalAlignment(super.LEFT);
    }
    if(value instanceof Integer){
    super.setHorizontalAlignment(super.RIGHT);
    }

    if(isSelected){
    System.out.println(row+" "+column+"被選中");
    setBackground(new Color(200,100,100));
    }else{
    setBackground(Color.blue);
    }
    解決了   不過新問題出現了就是if(isSelected)沒有作用,但else有作用。。不知道為什麽。。
      

  8.   

    回12樓: 用JLabel顯示的全部是左對齊