我想构建一个简单的 JTable,除了表头和表数据之间的单个水平分隔符之外没有网格线。分隔符应该像 JSeparator 一样跨越表格的整个宽度。我已经成功地使用 JLabels 和放置在 GridBagLayout 中的 JSeparator 实现了所需的外观,但是结果有点笨拙,我忍不住觉得存在更简洁的解决方案(也许使用 MatteBorder?)。任何帮助将不胜感激!
编辑:该解决方案可以使用单行代码来实现:
table.getTableHeader().setBorder(new MatteBorder(0,0,1,0, Color.BLACK));
最佳答案
您可能做了类似的事情:
创建一个 TableCellRenderer。
TableCellRenderer renderer = new DefaultTableCellRenderer() { final JLabel headerLabel = new JLabel(); { //setBorder(BorderFactory.createEmptyBorder()); headerLabel.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.RED)); headerLabel.setOpaque(true); headerLabel.setBackground(Color.WHITE); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (row == -1) { label.setText(value.toString()); return headerLabel; } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } };
将其用于表头(行 == -1)。人们也可以将其用于细胞。
for (int i = 0; i < model.getColumnCount(); ++i) { table.getTableHeader().getColumnModel().getColumn(i).setHeaderRenderer(renderer); }
要么使用
table.showHorizontalLines(false); table.showVerticalLines(false);
或
table.setGridColor(Color.WHITE);
如果您仅对标题使用单元格渲染器,则以下内容可能就足够了:
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.RED));
renderer.setOpaque(true);
renderer.setBackground(Color.WHITE);
关于java - JTable 中 header 和数据之间的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365016/