java – 在具有自定义行背景颜色的JTable中使用intercellSpacing
发布时间:2020-12-15 08:36:18 所属栏目:Java 来源:网络整理
导读:我有一个JTable,我想使用自定义背景颜色突出显示一些行.我已经完成了以下课程: public class MyTable extends JTable { private ListRefData data = null; public ListRefData getData() { return data; } public void setData(ListRefData data) { this.da
我有一个JTable,我想使用自定义背景颜色突出显示一些行.我已经完成了以下课程:
public class MyTable extends JTable { private List<RefData> data = null; public List<RefData> getData() { return data; } public void setData(List<RefData> data) { this.data = data; } @Override public Component prepareRenderer(TableCellRenderer renderer,int row,int column) { Component comp = super.prepareRenderer(renderer,row,column); if (this.data == null || row < 0 || row > this.data.size()-1){ return comp; } RefData rowData = this.data.get(row); if (rowData.getStatus() < 3000){ comp.setBackground(Color.YELLOW); } else { comp.setBackground(Color.WHITE); } return comp; } } 所有这一切都像一个魅力,我得到了我想要的.接下来,在查看生成的GUI时,我意识到该表看起来过于浓缩.一切看起来都挤得水泄不通.与使用默认的JTable设置一样;) 嗯,这很容易解决我想: myTable.setIntercellSpacing(new java.awt.Dimension(10,1)); 现在,单元格间隔很好但是,添加的单元格边距现在是默认的表格背景颜色,在我的情况下是白色.这看起来很丑陋. 我假设单元间距增加了单元格边框和prepareRenderer返回的组件之间的间距.这可以解释结果.但是我怎样才能让它改变细胞本身的背景呢? 我的prepareRenderer解决方案不适合这项任务吗?还是有其他解决方案吗? 解决方法
Border方法是正确的,但最好是单元格渲染器,而不是prepareRenderer()方法:
JTable.setDefaultRenderer(Object.class,new DefaultCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int column) { JComponent component = (JComponent) super.getTableCellRendererComponent(table,value,isSelected,hasFocus,column); component.setBorder(...); return component; } }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |