Как установить цвет моей 1-й строки в JTable на желтый (или любой другой цвет)?

Я могу установить один столбец на желтый, но я не могу установить строку на желтый.

Следующий код делает это для столбца:

TableColumn col = mytable.getColumnModel().getColumn(0);

col.setCellRenderer(new MyTableCellRenderer());

Как мне сделать это на ряд, пожалуйста?

Я пробовал учебные пособия и примеры в сети, но он всегда окрашивает всю таблицу в желтый цвет, а не в одну строку.

Спасибо

5 ответов

Что вам нужно сделать, это создать пользовательский TableCellRenderer. см. этот урок для деталей. вашему средству визуализации потребуется проверить переданный индекс строки и определить, является ли она строкой 0 или нет.

 public Component getTableCellRendererComponent(JTable table,
                                    Object value,
                                    boolean isSelected,
                                    boolean hasFocus,
                                    int row,
                                    int column) {
     if (row == 0) {
         setBackground(myBGColor)
     }
     ....

Из учебника "Как пользоваться таблицами":

Чтобы указать визуализатор для конкретной ячейки, вам нужно определить подкласс JTable, который переопределяет метод getCellRenderer. Например, следующий код заставляет первую ячейку в первом столбце таблицы использовать пользовательский рендер:

TableCellRenderer weirdRenderer = new WeirdRenderer();
table = new JTable(...) {
    public TableCellRenderer getCellRenderer(int row, int column) {
        if ((row == 0) && (column == 0)) {
            return weirdRenderer;
        }
        // else...
        return super.getCellRenderer(row, column);
    }
};

Вы можете просто проверить строку == 0 then используйте свой собственный рендер, else использовать по умолчанию.

Обычно я решал эту проблему, реализуя реализацию TableCellRenderer в стиле декоратора, которая оборачивает другой TableCellRenderer. Таким образом, вы можете сохранить специфичные для типа средства визуализации для каждого столбца, но обернуть каждый из них в средство визуализации декоратора, отвечающее за выделение строк.

Вот пример, который я написал, который использует этот подход, чтобы установить фон каждой альтернативной строки светло-серым.

public class AlternateRowRenderer implements TableCellRenderer {
    private final TableCellRenderer wrappedRenderer;

    public AlternateRowRenderer(TableCellRenderer wrappedRenderer, Color highlightColour) {
       this.wrappedRenderer = wrappedRenderer;
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean     isSelected, boolean hasFocus, int row, int column) {
        Component ret = wrappedRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        ret.setBackground(getTableBackgroundColour(table, value, isSelected, hasFocus, row, column));

        return ret;
    }

    @SuppressWarnings({"UnusedDeclaration"})
    public static Color getTableBackgroundColour(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Color ret;

        if (row % 2 != 0) {
            ret = isSelected ? ColourUtil.mergeColours(LIGHT_GREY,     table.getSelectionBackground(), 0.75) : LIGHT_GREY;
        } else {
            ret = isSelected ? table.getSelectionBackground() : table.getBackground();
        }

        return ret;
    }
}

Для простого способа установить альтернативные цвета строк, вы можете использовать SwingX для создания JXTable (так же, как JTable + некоторые интересные дополнительные функции), например:

myTabModel = new MyTableModel();
tab = new JXTable(myTabModel);

Color baseBackground = new Color(0,0,0,0);  // no color
Color alternateBackround = new Color(250,150,250,100);  // a fading purple color

tab.setHighlighters(HighlighterFactory.createAlternateStriping(baseBackground,alternateBackround);

обратите внимание, что 1-й ряд будет иметь baseBackground цвет

Надеюсь, поможет

Вы можете установить альтернативные цвета для строк jtable. Проверьте zybocodes

Другие вопросы по тегам