Как установить цвет моей 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