我想构建一个简单的JTable,它除了表头和表数据之间的单个水平分隔符之外没有网格线。分隔符应该像JSeparator一样跨越表的整个宽度。我已经设法使用JLabel和放置在GridBagLayout中的JSeparator来实现所需的外观,但是结果有点笨拙并且我无法帮助但感觉存在更简洁的解决方案(可能使用MatteBorder?)。任何帮助将不胜感激!
编辑:可以使用单行代码实现解决方案:
table.getTableHeader().setBorder(new MatteBorder(0,0,1,0, Color.BLACK));
答案 0 :(得分: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);
}
};
将它用于表头(row == -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);