1

JTable の行全体の色を変更したい。

JTable を次のように定義しました。

JTable table = new JTable(data, columnNames);

ここで、data、columnNames は文字列テーブルです。

これを行う最も一般的な方法は、独自のクラスを作成することです。

public class StatusColumnCellRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {

            //Cells are by default rendered as a JLabel.
            JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);

            //Get the status for the current row.

            l.setBackground(Color.GREEN);

            //Return the JLabel which renders the cell.
            return l;
        }
    }

そして呼び出します:

this.table.getColumnModel().getColumn(0).setCellRenderer(new StatusColumnCellRenderer());

しかし、それはうまくいきません。私は何を間違っていますか?

4

2 に答える 2

2

最初は正しく設定していTableCellRendererますが、次のコードに置き換えています。

for (int i = 0 ; i < table.getColumnCount(); i++)
   table.getColumnModel().getColumn(i).setCellRenderer( centerRenderer );

色付きのセル レンダラーを正しいインデックスに設定するように変更します (および中かっこ (!) を追加します)。

for (int i = 0; i < table.getColumnCount(); i++) {
    TableColumn column = table.getColumnModel().getColumn(i);
    if (i == COLOR_COLUMN) { // COLOR_COLUMN = 1
        column.setCellRenderer(new StatusColumnCellRenderer());
    } else { 
        column.setCellRenderer(centerRenderer);
    }
}
于 2013-06-02T12:55:00.343 に答える
2

JTable の行全体の色を変更したい。

レンダラーを最初の列にのみ追加しているため、行全体ではなく、最初の列のみが色付けされます。

行のすべての列に色を付けることが実際の要件である場合は、テーブル行のレンダリングを確認してください。

于 2013-06-02T19:20:08.287 に答える