3

NimbusLookAndFeelを使用しています。このルックアンドフィールでは、JTableのセルの背景は白とライトグレーに交互になります(行番号によって異なります)。今、私はTableCellRendererを実装するいくつかのカスタムセルレンダラーを書いています。JTable内のセルの位置に応じて、これらのレンダラーの背景を設定する必要があります。

public class MyCellRenderer extends JLabel implements TableCellRenderer{


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

                Color bgColor = //need to retrieve the right cell background color
                setBackground(bgColor);
        return this;
    }

}

どうすればそのような色の値を取得できますか?

4

2 に答える 2

8

技術的には、UIManagerを介して色にアクセスできます

   Color alternate = UIManager.getColor("Table.alternateRowColor");

実際には、レンダラーを最初から作成することはお勧めしません。正しく作成するために考慮すべき詳細がたくさんあります。これらの詳細はSwingXで処理されます(私にバイアスをかけました:-)

自分でロジックを実行することを期待しました;-)。これが機能するスニペットです(列ではなく行ごとに色を付けたいと仮定しますが、それを変更すると...些細なことです):

    TableCellRenderer renderer = new TableCellRenderer() {

        JLabel label = new JLabel();

        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            label.setOpaque(true);
            label.setText("" + value);
            Color alternate = UIManager.getColor("Table.alternateRowColor");
            if (row % 2 == 1) {
                label.setBackground(alternate);
            } else {
                label.setBackground(Color.WHITE);
            }
            return label;
        }

    };
    table.setDefaultRenderer(Object.class, renderer);
于 2011-07-04T13:34:48.040 に答える
-1

これは完全に機能するはずです:

public class MyRenderer extends DefaultTableCellRenderer { ... }
于 2016-05-17T09:21:21.037 に答える