我TableCellRenderers
在表格上使用过重新绘制单元格,以便表格中的每个交替行都是不同的颜色,但是,当我使用setShowGrid(false);
它时,它会删除网格线,但允许表格的背景颜色通过网格线过去的位置显示,而不是该行中单元格的颜色。
有没有办法给这些网格线着色?还是我需要一种更好的方法来为交替行着色?
您删除了线条但留下了间距。删除间距应该有效。
jTable.setIntercellSpacing(new Dimension(0,0));
为了给线条上色,您只需要设置 JTable 组件的背景颜色,但如果您想抑制它,只需设置单元间距:
给它上色:jTable.setBackground([color]);
导入 java.awt.BorderLayout;导入 java.awt.Color;导入 java.awt.Component;导入 java.awt.Dimension;
导入 javax.swing.JFrame;导入 javax.swing.JTable;导入 javax.swing.table.DefaultTableModel;导入 javax.swing.table.TableCellRenderer;
公共类 TestJFrame {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
JTable jTable = new JTable();
jTable.setModel(new DefaultTableModel(new String[][] { new String[] {"col1", "col2"}, new String[] {"col1", "col2"}, new String[] {"col1", "col2"}}, new String[] {"colHeader1", "colHeader2"}));
final TableCellRenderer defaultRenderer = jTable.getDefaultRenderer(Object.class);
jTable.setDefaultRenderer(Object.class, new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component result = defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(!isSelected) {
if (row%2 == 0) {
result.setBackground(Color.GRAY);
} else {
result.setBackground(Color.DARK_GRAY);
}
}
return result;
}
});
jTable.setBackground(Color.RED);
jTable.setShowGrid(false);
//jTable.setIntercellSpacing(new Dimension(0, 0));
jFrame.setLayout(new BorderLayout());
jFrame.add(jTable.getTableHeader(), BorderLayout.NORTH);
jFrame.add(jTable, BorderLayout.CENTER);
jFrame.pack();
jFrame.setVisible(true);
}