JTable背景色與boolean列的問題 本帖最后由 lg_asus 于 2010-07-12 16:44:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的意思是 把那兩處都注釋的話 new Boolean是以JCheckBox來顯示的而不注釋那兩句的話則是以true false字符串來顯示的 現在我想用JChcckBox來顯示并且要有背景色 因为你将boolean列的渲染器设置为DefaultTableCellRenderer,而DefaultTableCellRenderer返回的单元格组件是JLabel,所以必然不会显示为JCheckBox。解决方法就是自己重写TableCellRenderer,getTableCellRendererComponent方法返回一个带有JCheckBox的panel即可。 刚才写了一个单元格渲染器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; }}楼主看能用不 先謝了 你這樣寫的只是JCheckBox一種情況 我的數據中還有String Integer類型啊如果要渲染的話還要區別對待? 用instanceof可以來判斷類型可以解決if(value instanceof Boolean){ JCheckBox jck =new JCheckBox(); jck.setSelected(Boolean.parseBoolean(value.toString())); return jck; }可是這樣數據的對齊方式不對 正常的 String應該左對齊 Integer應該右對齊 Boolean居中,可是這樣做出來的話全部左對齊了 請問如何解決? 楼主,9楼说的已经够可以的了,楼主不要只用他的代码,你要把他的代码加上,你不会指望别人把你所有遇到的情况都给你写出来吧,而且你说的那个string,int的,用本身的jlabel不是可以吗? 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有作用。。不知道為什麽。。 回12樓: 用JLabel顯示的全部是左對齊 小公司笔试题一道,还新鲜呢,今天刚做的 Byte问题 大家谈谈对java中的反射的理解 如何在String a中去掉换行? jmf制作视频播放器 从命令行参数得到一整数并判断该数是不是回文数 关于Java的学习(回帖有分) 为什么我用JLabel可以显示但用JLabel却不能显示??? 请教各位,如何做一个较好的数据库连接池,有资料的,也好。加分,谢谢了!! 该如何做? 关于awt的键盘事件响应 如何自动格式化目录路径
而不注釋那兩句的話則是以true false字符串來顯示的
現在我想用JChcckBox來顯示并且要有背景色
解决方法就是自己重写TableCellRenderer,getTableCellRendererComponent方法返回一个带有JCheckBox的panel即可。
{
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;
}
}楼主看能用不
如果要渲染的話還要區別對待?
JCheckBox jck =new JCheckBox();
jck.setSelected(Boolean.parseBoolean(value.toString()));
return jck;
}可是這樣數據的對齊方式不對
正常的 String應該左對齊 Integer應該右對齊 Boolean居中,可是這樣做出來的話全部左對齊了 請問如何解決?
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有作用。。不知道為什麽。。