Фон JTable TableCellRenderer с проблемой цвета NimbusLookAndFeel - PullRequest
3 голосов
/ 04 июля 2011

Я использую 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;
    }

}

Как я могу получить такое значение цвета?

Ответы [ 2 ]

7 голосов
/ 04 июля 2011

Технически, вы можете получить доступ к цвету через 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);
0 голосов
/ 17 мая 2016

Это должно работать отлично:

public class MyRenderer extends DefaultTableCellRenderer { ... }
...