#java #swing #jtable
#java #качать #jtable
Вопрос:
Все в порядке?
У меня есть следующая таблица в моем Java-приложении. По статусу он придает строке определенный цвет, как я покажу в коде ниже.
Я хочу, чтобы был окрашен только первый столбец, остальные хотят отображаться с цветом по умолчанию.
public class PriorityCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
//if (Integer.valueOf(1).equals(table.getValueAt(row, 1)) amp;amp; 0 == column) amp;amp; 9 < column)
if (String.valueOf(1).equals(table.getValueAt(row, 0))) {
setForeground(Color.BLUE); // or background
}
if (String.valueOf(2).equals(table.getValueAt(row, 0))) {
setForeground(Color.GREEN); // or background
}
if (String.valueOf(3).equals(table.getValueAt(row, 0))) {
setForeground(Color.YELLOW); // or background
}
if (String.valueOf(4).equals(table.getValueAt(row, 0))) {
setForeground(Color.RED); // or background
}
return this;
}
}
Понял мой вопрос?
Кто-нибудь может мне помочь, пожалуйста?
Большое вам спасибо.
Комментарии:
1. удалить другие ifs?
2. Это должно быть:
if (0 == column) setBackground(Color.RED)
3. Спасибо всем за ответ. Я попробовал это: if (String.valueOf(1).equals(table.getValueAt(row, 0))amp;amp; column == 0) { setForeground(Color.BLUE); } Но результат тот же.
Ответ №1:
-
Установите пользовательский рендеринг для целевого столбца:
table.getColumnModel().getColumn(COLUMN_INDEX).setCellRenderer(new PriorityCellRenderer());
-
в
getTableCellRendererComponent()
проверке индекса столбцаif(column == COLUMN_INDEX)
Комментарии:
1. Спасибо за вашу помощь, сэр 🙂
2. опубликованный код, описанный qeustion — это задание для prepareRenderer()
3. @mKorbel, вы правы, это можно сделать
prepareRenderer()
методомJTable