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

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

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

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

col.setCellRenderer(new MyTableCellRenderer());

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

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

Спасибо

Ответы [ 5 ]

3 голосов
/ 29 июня 2009

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

 public Component getTableCellRendererComponent(JTable table,
                                    Object value,
                                    boolean isSelected,
                                    boolean hasFocus,
                                    int row,
                                    int column) {
     if (row == 0) {
         setBackground(myBGColor)
     }
     ....
2 голосов
/ 29 июня 2009

Обычно я решал эту проблему, реализуя реализацию 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;
    }
}
2 голосов
/ 29 июня 2009

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

Чтобы указать рендерер для конкретной ячейки, вам нужно определить подкласс 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 использовать значение по умолчанию.

1 голос
/ 03 апреля 2011

Чтобы упростить установку цветов альтернативных рядов, вы можете использовать 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 цвет

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

0 голосов
/ 21 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...