从Java中的表中删除网格线但将整行保留为相同的颜色

时间:2012-06-21 14:16:11

标签: java colors gridlines

我在表格上使用TableCellRenderers重新绘制单元格,以便表格中的每个替代行都是不同的颜色,但是,当我使用setShowGrid(false);时,它会删除网格线但允许背景颜色该表格用于显示网格线的位置,而不是该行中单元格的颜色。

有没有办法为这些网格线着色?或者我是否需要一种更好的方法来为备用行着色?

2 个答案:

答案 0 :(得分:1)

您删除了线但留下了间距。删除间距应该有效。

jTable.setIntercellSpacing(new Dimension(0,0));

答案 1 :(得分:0)

为了对线条进行着色,您只需要设置JTable组件的背景颜色,但如果要抑制它,只需设置单元间距:

  • 抑制:jTable.setIntercellSpacing(new Dimension([spacingings]));
  • 着色它:jTable.setBackground([color]);

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension;

    import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import 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);
    }