Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Renderer per colorare testo in righe tabella

    Salve, dovrei realizzare la seguente funzionalità su una tabella ma non riesco a venirne a capo:
    praticamente dovrei implementare un renderer che faccia questa cosa, io gli passo la colonna e la riga specifica della mia JTable e in questa cella vorrei che il testo cambiasse di colore.

    Ho provato a realizzare qualcosa ma l'effetto che ho avuto è che veniva colorato il testo di tutta la colonna. A me invece serve colorare il testo in solo specifiche righe della colonna.

    avete qualche suggerimento?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    posta un po' di codice...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3

    ecco

    codice:
    table.getColumnModel().getColumn(5).setCellRenderer(new DefaultTableCellRenderer() {
    public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
    Component cell = super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
    cell.setForeground( Color.red);
    return cell;
    
    }});
    questo mi colora tutto il testo della colonna 5 della mia tabella.

    Vorrei invece colorare solo il testo della riga x della colonna y.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ecco

    Originariamente inviato da fabiolinux85
    Vorrei invece colorare solo il testo della riga x della colonna y.
    Ti viene passato il numero di riga .... fai un test, no?

    E comunque c'è anche un altro modo per personalizzare la visualizzazione delle celle senza dover implementare e aver a che fare direttamente con un renderer, vedi RowsBackgroundTable.java nei miei Java Examples.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    mah...

    Guarda col numero di riga è troppo generico, praticamente io ho questa situazione:

    ARTICOLO X | QUANTITA' MAGAZZINO | SCORTA MINIMA

    se QUANTITA' MAGAZZINO<SCORTA MINIMA

    la il testo contenuto nella cella QUANTITA' MAGAZZINO della riga relativa all'ARTICOLO X deve essere colorato di rosso, altrimenti nero.

    Quindi non posso passare una riga specifica perchè non lo so a priori, i dati vengono caricati da un db....

    dovrei fare questo:
    controllare prima se si verifica la situazione QUANTITA' MAGAZZINO<SCORTA MINIMA al caricamento di ogni singola tupla nella tabella e quindi settare un valore a true o false.

    Ora mi chiedo, questo valore posso passarlo come parametro al renderer di cui sopra?
    e poi quindi fare il controllo su quel valore?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: mah...

    Originariamente inviato da fabiolinux85
    se QUANTITA' MAGAZZINO<SCORTA MINIMA

    la il testo contenuto nella cella QUANTITA' MAGAZZINO della riga relativa all'ARTICOLO X deve essere colorato di rosso, altrimenti nero.
    Ok. Se la "personalizzazione" delle celle dipende da uno o più dati nel model, allora è chiaro che la parte dove viene gestita la personalizzazione deve "sapere" del "modello" dei dati.

    Nel tuo caso devi personalizzare una singola cella in base al suo valore e al valore di un'altra cella sulla stessa riga. Realizzare un apposito renderer quindi è appropriato. Il renderer però dovrebbe "sapere" del model (avere un reference al model). E a questo punto si tratta solo di vedere quale model hai usato.
    Uno standard? (es. DefaultTableModel?) O uno "tuo"?? In questi casi sarebbe più utile e opportuno se avessi realizzato un "tuo" model che è modellato su una struttura dati basata su una lista (lista intesa in senso generale, array, ArrayList o quello che ti pare) di oggetti di tipo TuoRecord (che a sua volta modella i dati di una riga). TuoRecord ha quindi i getter per leggere quei due valori o meglio ancora un metodo es. isSottoScortaMinima() che semplifica e astrae il test.

    Nel renderer quindi tutto si riassumerebbe in poche righe:

    codice:
    TuoRecord rec = tuoModel.getRecord(row);
    if (rec.isSottoScortaMinima()) {
    ....
    Dove tuoModel è una variabile di istanza interna al renderer (ripeto: il renderer deve "sapere" del model) e row è la riga richiesta al renderer.

    Tutto qui. Guarda che la questione è solo questa .... fare in modo che il renderer "sappia" del model.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.