如何删除 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/