本帖最后由 u013782493 于 2014-03-07 22:03:40 编辑

解决方案 »

  1.   

    "本单元格设置好颜色后,其他单元格都会被设置成默认单元格颜色,而不会保留其原来颜色"
    这里的默认单元格颜色指的是哪个颜色,我觉得是和“本单元格设置的颜色”相同。
    如果是这种情况的话,是因为你使用的renderer都是从下面这个实例中获得的:
    DefaultTableCellRenderer dtcr =new DefaultTableCellRenderer();
    当遇到“本单元格”,你把上述实例中的renderer设置成某个背景颜色,那对于后续的JTabe单元格,在渲染时都是在使用这个实例,所以后续的单元格就和“本单元格”颜色相同了。
      

  2.   


    你说的跟我想的有点不一样,为了避免混淆,我简单叙述吧。
    比方说我现在有3*3表格,首先我想设置(1,1)这个单元格背景色为BULE,用上面代码是可以实现这一步。
    但是这个时候我又想设置(2,2)这个单元格背景色为RED,用上面代码最终的效果是:除了(2,2)这个单元格是RED,其他单元格都已经是系统默认的背景色了,(1,1)单元格背景色BULE已经丢失,但是我想保留这个单元格背景色,该如何操作?说实话,上面那段代码我也是从网上搜的不怎么懂,您是否有更好的解决方案?
      

  3.   

    jtable.setDefaultRenderer(Object.class,new myTableCellRenderer(1,1,color.blue));
    jtable.setDefaultRenderer(Object.class,new myTableCellRenderer(2,2,color.Red));
    你是不是调用了上面两行代码,但发现(1,1)是默认颜色,(2,2)是RED?
    这个原因是:你使用第二行代码中的Renderer实例替代了第一行中的renderer实例。
    第一行中的renderer实例已经不再能被JTable利用了。一种方法是你使用一个Renderer,在这个renderer的内部对行列进行控制,但这种方式就无法动态的传入行和列了(或者在这个renderer的构造函数中,一次性的告诉哪些行,哪些列,显示哪些颜色,然后在getTableCellRendererComponent中进行控制)。
    另一种方法就是扩展JTable,然后override getCellRenderer()这个方法,这可以提供对单元格的精确控制。