如何删除 JScrollPane 内的边框

How to remove border inside JScrollPane

您好,有什么方法可以去除 JScrollPane 中的边框 header?

这是我的 JScrollPane header 边框的图片

我尝试了很多方法来删除 header 边框,例如将边框设置为 null,但都没有成功。

这是设置 JScrollPane 边框的代码...

JScrollPane scrollPane = new JScrollPane();
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.getVerticalScrollBar().setUI(new CustomJScrollBar());
    scrollPane.setViewportBorder(new EmptyBorder(0, 0, 0, 0));
    scrollPane.setBounds(105, 127, 1120, 540);
    scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0));
    scrollPane.getViewport().setBackground(Color.WHITE);

    add(scrollPane);

非常感谢!

您可能需要增加默认单元格 header 渲染器,例如:

public class MyRenderer implements TableCellRenderer {
    private TableCellRenderer parent;
    private Border emptyBorder = BorderFactory.createEmptyBorder();

    private MyRenderer(TableCellRenderer parent) {
        this.parent = parent;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel headerLabel = (JLabel) parent.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        headerLabel.setBorder(emptyBorder);
        return headerLabel;
    }
}

然后,您可以将其设置为渲染器以用于:

JTable jt = <your table>
JTableHeader tableHeader = jt.getTableHeader();
tableHeader.setDefaultRenderer(new MyRenderer(tableHeader.getDefaultRenderer()));