关于设置JTable中单元格背景颜色的问题 本帖最后由 u013782493 于 2014-03-07 22:03:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "本单元格设置好颜色后,其他单元格都会被设置成默认单元格颜色,而不会保留其原来颜色"这里的默认单元格颜色指的是哪个颜色,我觉得是和“本单元格设置的颜色”相同。如果是这种情况的话,是因为你使用的renderer都是从下面这个实例中获得的:DefaultTableCellRenderer dtcr =new DefaultTableCellRenderer();当遇到“本单元格”,你把上述实例中的renderer设置成某个背景颜色,那对于后续的JTabe单元格,在渲染时都是在使用这个实例,所以后续的单元格就和“本单元格”颜色相同了。 你说的跟我想的有点不一样,为了避免混淆,我简单叙述吧。比方说我现在有3*3表格,首先我想设置(1,1)这个单元格背景色为BULE,用上面代码是可以实现这一步。但是这个时候我又想设置(2,2)这个单元格背景色为RED,用上面代码最终的效果是:除了(2,2)这个单元格是RED,其他单元格都已经是系统默认的背景色了,(1,1)单元格背景色BULE已经丢失,但是我想保留这个单元格背景色,该如何操作?说实话,上面那段代码我也是从网上搜的不怎么懂,您是否有更好的解决方案? 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()这个方法,这可以提供对单元格的精确控制。 怎么用java代码创建图片? 怎么获取JPasswordField 里的字符串 getText可以吗? 如何提取数组中的一个值,并转为string类型,赋值给一个变量 java中中文查询数据库时出现乱码的问题 ==============在线等,请教绘图的一个小问题============== java 图像缩放时像素变化问题 仿照windows的记事本编写一个GUI窗口程序 判断当前时间是不是在一个时间段里,高手请进 关于instanceof的问题! java 为什么不能在类里定义方法,而在类外实现其方法呢? EJB3.0+JBOSS7.1,客户端局域网内调用EJB出错 owc使用
这里的默认单元格颜色指的是哪个颜色,我觉得是和“本单元格设置的颜色”相同。
如果是这种情况的话,是因为你使用的renderer都是从下面这个实例中获得的:
DefaultTableCellRenderer dtcr =new DefaultTableCellRenderer();
当遇到“本单元格”,你把上述实例中的renderer设置成某个背景颜色,那对于后续的JTabe单元格,在渲染时都是在使用这个实例,所以后续的单元格就和“本单元格”颜色相同了。
你说的跟我想的有点不一样,为了避免混淆,我简单叙述吧。
比方说我现在有3*3表格,首先我想设置(1,1)这个单元格背景色为BULE,用上面代码是可以实现这一步。
但是这个时候我又想设置(2,2)这个单元格背景色为RED,用上面代码最终的效果是:除了(2,2)这个单元格是RED,其他单元格都已经是系统默认的背景色了,(1,1)单元格背景色BULE已经丢失,但是我想保留这个单元格背景色,该如何操作?说实话,上面那段代码我也是从网上搜的不怎么懂,您是否有更好的解决方案?
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()这个方法,这可以提供对单元格的精确控制。