【问题标题】:remove cells border in a jtable删除 jtable 中的单元格边框
【发布时间】:2011-03-11 04:11:19
【问题描述】:

我有我的自定义单元格渲染器,并且想要删除单元格的边框。
我该怎么做?我试过 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;
    }
}

【问题讨论】:

    标签: java swing jtable border borderless


    【解决方案1】:

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

    【讨论】:

    • 我可以设置除 emptyBorder 之外的所有类型的边框。
    • 当您使用 EmptyBorder 时,您希望看到什么?你怎么知道它不起作用。它对我来说很好,文本靠在左边缘而不是因为默认边框而缩进 1 个像素。
    【解决方案2】:

    在单元格之间绘制的线不是单元格本身的一部分。它们是由桌子绘制的。您可以通过以下方式为整个表格关闭它们:

    table.setShowGrid(false);
    

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

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

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

    table.setGridColor(color)
    

    【讨论】:

    • 您也可以同时使用setShowGrid() 进行这两项操作
    • @WimDeblauwe 谢谢,我错过了那个
    • @Devon_C_Miller 如果我只想删除 1 个单元格周围的边框怎么办??
    • @Nikhil 处理网格渲染的 javax.swing.plaf.basic.BasicTableUI 将其实现为私有方法,因此没有简单的方法可以覆盖它。我没有尝试过这些,但有一些可能看看:code.google.com/p/spantablejava2s.com/Code/Java/Swing-Components/…