删除在JTable中的细胞边界
-
02-10-2019 - |
题
我有我的自定义单元格渲染器,并想删除单元的边框。
我该怎么做?我尝试了setBorder,但它不起作用。
这是我的渲染器代码:
public class MyTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = -1195682136616306875L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (!isSelected) {
if (row % 2 == 0 && row != 1) {
c.setBackground(new Color(255, 255, 150));
} else {
c.setBackground(Color.WHITE);
}
} else {
c.setBackground(new Color(255, 230, 255));
}
c.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
return c;
}
}
解决方案
细胞之间绘制的线不是细胞本身的一部分。它们是由桌子绘制的。您可以使用以下方式将它们关闭以获取整个桌子:
table.setShowGrid(false);
仅禁用水平或垂直线:
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
或者,您可以使用以下方式更改行的颜色:
table.setGridColor(color)
其他提示
我不知道您的代码如何编译,因为只有秋千组件才能具有边框,并且组件类没有setBorder()方法。
当我覆盖默认渲染器时,我会使用类似的东西:
Class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
this.setBorder (BorderFactory.createBevelBorder (EtchedBorder.RAISED));
return this;
}
}
不隶属于 StackOverflow