Вот короткий фрагмент, демонстрирующий, что я думаю, вы пытаетесь достичь:
public class Testing {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Testing();
}
});
}
public Testing() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
String[] colNames = { "Col1", "Col2" };
Object[][] data = { { "A", "B" }, { "B", "C" } };
JTable table = new JTable(data, colNames);
CustomRenderer renderer = new CustomRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);
// table.setDefaultRenderer(String.class, renderer); // if you want to only
// color and center all strings
for (int col = 0; col < table.getColumnCount(); col++) {
// if you want to color and center every entry of the table
table.getColumnModel().getColumn(col).setCellRenderer(renderer);
}
panel.add(table);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
class CustomRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
cellComponent.setBackground(Color.white); // white if not "A" or "B"
if (value instanceof String) {
String temp = (String) value;
if (temp.equals("A")) {
cellComponent.setBackground(Color.YELLOW);
} else if (temp.equals("B")) {
cellComponent.setBackground(Color.GRAY);
}
}
return cellComponent;
}
}
}
Результат будет выглядеть так:
введите описание изображения здесь
Обратите внимание, что ваш пользовательский рендерер должен быть создан только один раз, а не каждые l oop. Проблема в вашем коде заключалась в том, что вы использовали не свой собственный рендерер, а DefaultTableCellRenderer
. Кроме того, если вы хотите использовать пользовательский рендеринг только для определенного типа класса c, например только для String
объектов, вы можете использовать закомментированную строку вместо повторения по всем столбцам таблицы. И, конечно же, вы можете добавить дополнительные ограничения к CustomRenderer
в соответствии с вашими потребностями.