在JTable中去除单元格边框

22

我有一个自定义单元格渲染器,并想要去掉单元格的边框。
我该怎么做?我尝试了 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;
    }
}
2个回答

54

单元格之间的线条不是单元格本身的一部分,它们是由表格绘制的。您可以使用以下代码关闭整个表格的线条:

table.setShowGrid(false);

要仅禁用水平线或垂直线:

table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);

或者,你可以使用以下方式改变线条的颜色:

table.setGridColor(color)

2
你可以使用setShowGrid()同时完成两个任务。 - Wim Deblauwe
@WimDeblauwe 谢谢,我漏掉了那个。 - Devon_C_Miller
@Devon_C_Miller 如果我只想去掉一个单元格周围的边框怎么办? - Nikhil Chilwant
@Nikhil javax.swing.plaf.basic.BasicTableUI处理网格的渲染,将其实现为私有方法,因此没有简单的方法可以覆盖它。我尚未尝试过这些,但可以考虑一些可能性:https://code.google.com/p/spantable http://www.java2s.com/Code/Java/Swing-Components/MultiSpanCellTableExample.htm - Devon_C_Miller

3

我不知道你的代码是如何编译的,因为只有Swing组件才能有边框(Border),而Component类没有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;
    }
}

1
我可以设置所有类型的边框,除了emptyBorder。 - harshit
2
当您使用EmptyBorder时,您希望看到什么?您如何知道它不起作用?对我来说它很好用,因为默认边框的缘故,文本紧贴左边缘而不是向右缩进1像素。 - camickr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接