有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JTable中标头和数据之间的java分隔符

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

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

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

共 (1) 个答案

  1. # 1 楼答案

    你可能也做过类似的事情:

    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);