formatowanie tabeli z użyciem custom renderer - tylko pierwsza kolumna?

0

Witam,

Zacząłem niedawno swoją małą przygodę z javą (JDK7). Mam problem z tabelką w Swing (JTable).
Chcę zrobić swój customrender i wszystko chodzi, ale nie do końca tak jak bym chciał, jest małe "ale".
Chciałbym pokolorować cały wiersz, ale niestety koloruje tylko pierwszą kolumnę, tylko na nią to oddziałuje. Debuger pokazuje, że skacze po wierszach pierwszej kolumny, ale nie "wchodzi" na drugą kolumnę.
Mam taki kodzik:

Ustawienie renderera:

jTable1.setDefaultRenderer(Object.class, new BoardTableCellRenderer());

Klasa:

class BoardTableCellRenderer extends DefaultTableCellRenderer {
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
Object valueAt = table.getModel().getValueAt(row, 1);
 
      String s = "";
      if (valueAt != null) {
         s = valueAt.toString();
      }
if (s.equalsIgnoreCase("1")) {
         c.setForeground(Color.YELLOW);
         c.setBackground(Color.gray);
      } else {
         c.setForeground(Color.black);
         c.setBackground(Color.WHITE);
      }
}

Kolumn mam 3 (dla przykładu) i chcę zmieniać kolor wiersza (tła) na podstawie zawartości komórki z kolumny drugiej (indeks 1).
Ale zmienia mi tylko tło komórek z pierwszej kolumny.
Próbowałem użyć pętli by ręcznie przeskoczyć wszystkie trzy kolumny danego wiersza i teoretycznie działało, ale no właśnie, tylko w teorii. (Debuger pokazywał, że faktycznie skacze po kolumnach, ale efekt był zerowy, żadnej zmiany)
Pewnie to jakiś drobiazg, ale nie mogę go wypatrzyć. Może ktoś będzie w stanie go dostrzec.

Dzięki i pozdrawiam

0

Głupie pytanie, podpiąłeś swojego renderera do każdej kolumny? Przy Twoim kodzie renderer jest podpięty tylko do tych kolumn, dla których getColumnClass zwraca Object.class.

0

Czyli jak rozumiem w tym renderze są analizowane te kolumny, które mają typ "Object" (dla tego przykładu akurat, tak?
Wcześniej miałem klasę jako string i chodziło. Tabela ma 3 różne typy: String, Integer i Boolean, a mimo to przy Object przegląda tylko Stringa.
Chciałbym aby dla różnych typów mi przeglądało tak samo, ale z tego co mówisz, musiałbym zrobić render dla każdego z typów? Troche byłoby to bez sensu. No ok, pokombinuję jeszcze. Dzięki za wskazówkę.

0

Zrób cos takiego:

CellRenderer renderer = new BoardTableCellRenderer();

a potem w pętli po kolumnach

column.setCellRenderer(renderer);

1 użytkowników online, w tym zalogowanych: 0, gości: 1