日期:2014-05-20  浏览次数:20719 次

JTable cell编辑颜色、文本
最近做java界面,用JTable,需要编辑里面单个Cell:设置文本,设置颜色(多个,不规则排布的CEll)。

在网上参考了一下代码,实现个方法修改颜色的功能,但都是一修改就修改了一列,或者只能修改某列中的一个,代码如下:

public void setCellColor(JTable table, final int rowID,final int columnID,final Color colorChange){

DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {  

  private static final long serialVersionUID = 1L;

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
Component cell = super.getTableCellRendererComponent
(table, value, isSelected, hasFocus, row, column);

if(row==rowID && column==columnID && cell.isBackgroundSet()){
cell.setBackground(colorChange);  

}
else 

cell.setBackground(Color.white); 
return cell;  
}  
};  
table.getColumnModel().getColumn(columnID).setCellRenderer(tcr);
table.repaint();
}

请教实现可以修改任意多个cell背景颜色和文本的方法,有代码最好

谢谢!

------解决方案--------------------
楼主这个不知道想干嘛,TableModel之所以有getColumnClass()方法,是因为Swing的JTable里面一列就是一个类型,就像数据库表一样,一个列不允许出现不同的类型,否则显示的时候会强制将不属于该类型的值转换成该类型,JTable的很多效果正是通过getColumnClass()方法获取到的类来决定的,比如某一列getColumnClass()方法返回的是Boolean.class,就会用JCheckBox来作为该列的编辑器,而JTable的setDefaultRenderer()方法的作用是把所有getColumnClass()获取到的Class为指定Class的列的渲染器设为指定类型,所以从本质上来说,只是设置了列的渲染器而已,并不是单元格的渲染器,所以要达到楼主的“多个,不规则排布的单元格”的效果,依然还是没办法,只能在设置列的渲染器之后,再在渲染器内部的行上面作文章。