java - 如何删除 Jtable 标题网格线

标签 java swing

如何删除 Jtable 标题网格线,我能够从行中删除网格线,但它在 jtable 标题中给出了网格线。是否可以删除 Jtable 标题网格线。

最佳答案

Is it possible to remove JTable header grid lines.

只是好奇:你为什么要这样做?

现在的答案是:不,不是。表格标题呈现取决于 TableHeaderUI Look and Feel 提供的实现和 JTableHeader的渲染器。您可以告诉渲染器您不需要边框,但如果 L&F 使用带边框的自定义画家(例如:Nimbus),那么您仍然有边框。

尽管如其他答案中所述,有(糟糕的)解决方法,但它们都有其局限性。

提供自定义渲染器

为了尽可能保持表格标题的渲染与原始渲染最相似,这意味着不会丢失列 DnD 效果、应用排序时的图标等,我将使用我自己的渲染器,如下所示:

public class TableHeaderRenderer implements TableCellRenderer {

    private final TableCellRenderer baseRenderer;

    public TableHeaderRenderer(TableCellRenderer baseRenderer) {
        this.baseRenderer = baseRenderer;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JComponent c = (JComponent)baseRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        c.setBorder(new EmptyBorder(2,2,2,2));
        return c;
    }
}

然后您可以使用默认渲染器作为新渲染器的基础,如下所示:

JTable table = new JTable(5, 5);
table.setAutoCreateRowSorter(true);
table.setShowGrid(false);

TableCellRenderer baseRenderer = table.getTableHeader().getDefaultRenderer();
table.getTableHeader().setDefaultRenderer(new TableHeaderRenderer(baseRenderer));

然而,它的功能取决于 L&F:例如,这不适用于 Nimbus。

玩转 UIManager 属性

正如@blackbishop 所述,您可以使用 UIManager 设置一个属性来告诉 L&F 它不得绘制表格标题单元格边框。然而,没有关于这些属性的约定(每个 L&F 都有自己的属性),大多数 L&F 可能会忽略它们。

关于java - 如何删除 Jtable 标题网格线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25184138/

相关文章:

java - 如何阻止 BorderLayout 的中心占据东部和西部?

java - 如何将 JCheckbox 放在 JTable 上?

java - JTree setSelectionPaths 展开时间太长

java - jtree中的文件夹排序

java - 同步静态方法在 android 中不起作用?

JTable 单元格更改上的 JAVA 更新数据库

java - Cardlayout 不会在 InternalFrame 上的卡片内显示面板

java - gnome 中的 SWT 托盘项

java - 如何使用 JNI 在构建器 C++ 应用程序中启动 JVM

java - 在 Java 中使用同步