2012-03-20 19 views
5

Sto usando JXTable e so come farlo in base a DefaultRenderers per JTable, ma voglio sapere come farlo in un modo che sia JXTable -appena basato su HighlighterPipeline.SwingX JXTable: usa ColorHighlighter per colorare le righe in base a un "oggetto riga"

Ho un elenco di oggetti visualizzati in una tabella e ogni riga rappresenta un oggetto. Vorrei colorare le righe mostrando oggetti di un certo tipo di un colore diverso.

Sembra che dovrei usare ColorHighlighter. Ma non riesco a trovare esempi per questo, oltre ai semplici evidenziatori come "colora ogni altra riga" o qualcosa del genere.

Ho bisogno del numero di riga perché non esiste un "oggetto riga" nel paradigma JTable/TableModel, ma se posso farlo, posso facilmente testare un predicato e restituire vero/falso per dire all'evidenziatore di calciare o no.

Qualcuno può aiutarmi a capire la direzione giusta per farlo funzionare?

risposta

4

non importa, l'ho capito. Era solo difficile capire il modo di usare ComponentAdapter in modo propositivo.

JXTable table = ... 
final List<Item> itemList = ... 

final HighlightPredicate myPredicate = new HighlightPredicate() { 
     @Override 
     public boolean isHighlighted(
      Component renderer, 
      ComponentAdapter adapter) { 

      Item item = itemList.get(adapter.row); 
      return testItem(item); 
     } 

     public boolean testItem(Item item) { ... } 
} 

ColorHighlighter highlighter = new ColorHighlighter(
     myPredicate, 
     Color.RED, // background color 
     null);  // no change in foreground color 

table.addHighlighter(highlighter); 
+1

contento che hai trovato una soluzione - solo attenzione: l'adapter.row è in vista coordinate in tutta ITEMLIST (molto probabilmente?) È in modello coordinate, quindi il test restituisca risultati non corretti se la tabella è ordinata/filtrato. Per correggere, chiama adapter.convertRowIndexToModel – kleopatra

+0

ok grazie - Sto disabilitando l'ordinamento di JXTable per utilizzare le strutture di ordinamento di GlazedLists, quindi i miei indici sono coerenti con le righe visualizzate finali. grazie comunque! –

+0

p.s. cosa è successo agli oleodotti di Highlighter? sono andati? Sto cercando di trovare informazioni generali sugli evidenziatori JXTable ed è una raccolta casuale di cose obsolete. –