求高手指导:
 我想点击某个单元格改变其颜色(这个已经实现),接下来就是点击别的单元格 修改另一个单元格的颜色,但是以前修改过的单元格颜色保持更改,比如点了(2,2)设置为蓝色,然后点(3,3)设置为绿色,现在的问题是改了(3,3)后,(2,2)又变回原来的颜色了,有没有什么办法解决这个问题?谢谢啊。以前做过一个刷新List的用线程刷新,但是JTable和LIST不一样啊,求大牛指导一下,不胜感激。最好能详细点,分不是问题。

解决方案 »

  1.   


    public class ChangeColor {
    int r,c,f;
    public void changeColor(final JTable table,final int a,final int b,int flag){
    r=a;
    c=b;
    f=flag;
    System.out.println("changcolor  flag == "+f);
        table.setDefaultRenderer(Object.class,new EvenOddRenderer());//为JTable增加渲染器,因为是针对于表格中的所有单元格,所有用Object.class   
    }
    class EvenOddRenderer implements TableCellRenderer { public final DefaultTableCellRenderer DEFAULT_RENDERER =
    new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int column) {
    Component renderer =
    DEFAULT_RENDERER.getTableCellRendererComponent(table, value,
    isSelected, hasFocus, row, column);
    Color foreground, background;
    System.out.println("changcolor  f= "+f);
    if (row == r&&column==c&&f==1) {
    foreground = Color.BLACK;
    background = Color.YELLOW;
    }else if(row == r&&column==c&&f==2){
    foreground = Color.BLACK;
    background = Color.GREEN;
    }else if(row == r&&column==c&&f==3){
    foreground = Color.BLACK;
    background = Color.YELLOW;
    }else if(row == r&&column==c&&f==4){
    foreground = Color.BLACK;
    background = Color.GREEN;
    }else if(row == r&&column==c&&f==5){
    foreground = Color.BLACK;
    background = Color.PINK;
    }else {
    foreground = Color.BLACK;
    background = Color.GREEN;
    }
    renderer.setForeground(foreground);
    renderer.setBackground(background);
    return renderer;
    }
    }}
      

  2.   

     int r,c,f; 不应该成员变量 实现有问题 应该是你代码的问题。改变颜色应该是Renderer的责任。。不知道你为啥把这东西封装在类ChangeColor 里面,,,就是简单写Render,然后不同的单元格不同的颜色Render是针对整个列的。。
      

  3.   


    封装到ChangeColor 类是因为 我不是点击单元格改变颜色 而是点击Button后获取到当前单元格的row和col然后改变颜色 这个因为其他需求 所以必须这样写。