java - JTable 中 header 和数据之间的分隔符

标签 java swing jtable

我想构建一个简单的 JTable,除了表头和表数据之间的单个水平分隔符之外没有网格线。分隔符应该像 JSeparator 一样跨越表格的整个宽度。我已经成功地使用 JLabels 和放置在 GridBagLayout 中的 JSeparator 实现了所需的外观,但是结果有点笨拙,我忍不住觉得存在更简洁的解决方案(也许使用 MatteBorder?)。任何帮助将不胜感激!

编辑:该解决方案可以使用单行代码来实现:

table.getTableHeader().setBorder(new MatteBorder(0,0,1,0, Color.BLACK));

最佳答案

您可能做了类似的事情:

  1. 创建一个 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);
        }
    
    };
    
  2. 将其用于表头(行 == -1)。人们也可以将其用于细胞。

    for (int i = 0; i < model.getColumnCount(); ++i) { 
        table.getTableHeader().getColumnModel().getColumn(i).setHeaderRenderer(renderer);
    }
    
  3. 要么使用

    table.showHorizontalLines(false);
    table.showVerticalLines(false);
    
  4. 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/

相关文章:

java - 对于可以在线和离线使用的应用程序,分离层的好策略是什么?

java - 创建 JTable 来显示数据时遇到问题

java - 有没有一种干净的方法来检查一个字符串是否包含另一个字符串中的字符

java - 在 TCP 服务器中使用 vertx Vertciles 的有效方法

java - 如何在多个异步任务完成后启动新的 Activity

java - 当只有按钮对象具有 .addActionListener 时,为什么此代码中的 JFrame 会对 ActionEvents 使用react?

java - 当文本区域不可编辑时按下按键如何在 jpanel 中显示只读消息文件?

java - 如何禁止两个 JTable 之间的拖放?

java - 如何制作删除按钮来删除JTable中的行?

java - 如何将对象分解为 byte[]?