删除jtable中的单元格边框

时间:2010-07-02 15:34:56

标签: java swing jtable border borderless

我有自定义单元格渲染器,想要删除单元格的边框 我该怎么做?我尝试了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 个答案:

答案 0 :(得分:50)

细胞之间绘制的线不是细胞本身的一部分。他们被桌子绘制。您可以使用以下命令关闭整个表:

table.setShowGrid(false);

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

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

或者,您可以使用以下颜色更改线条的颜色:

table.setGridColor(color)

答案 1 :(得分:2)

我不知道你的代码是如何编译的,因为只有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;
    }
}