0

TableCellRenderersテーブルでセルを再描画して、テーブルのすべての行が異なる色になるように使用しましたが、使用setShowGrid(false);するとグリッド線が削除されますが、グリッド線があった場所からテーブルの背景色が表示されます、その行のセルの色ではありません。

これらのグリッド線に色を付ける方法はありますか? または、交互の行に色を付けるためのより良い方法が必要ですか?

4

2 に答える 2

1

行を削除しましたが、間隔は残しました。間隔を削除するとうまくいくはずです。

jTable.setIntercellSpacing(new Dimension(0,0));
于 2012-06-21T14:51:57.487 に答える
0

行に色を付けるには、JTable コンポーネントの背景色を設定する必要がありますが、それを抑制したい場合は、セル間の間隔を設定するだけです。

  • 抑制: jTable.setIntercellSpacing(new Dimension([spacings]));
  • 色を付ける: jTable.setBackground([color]);

    import java.awt.BorderLayout; java.awt.Color をインポートします。java.awt.Component をインポートします。java.awt.Dimension をインポートします。

    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);
    }
    
于 2012-06-21T15:06:35.780 に答える