Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Blinking cell Jtable

  1. #1

    Blinking cell Jtable

    Ciao a tutti! Devo implementare una tabella le cui righe hanno dei particolari colori in base al contenuto. Il primo campo di queste righe inoltre deve lampeggiare in base ad un particolare dato contenuto nella riga ma non visualizzato nella colonna! Qualcuno saprebbe darmi una dritta su come implementare questo??? E' scontato che devo realizzare un TableCellRenderer personalizzato per determinare il colore della riga ma il problema e' il blinking di una cella! Tale blinking inoltre deve essere centralizzato da un timer per l'intera applicazione (in quanto quella cella non e' l'unico componente che deve lampeggiare!!). Qualcuno sa' dove posso ricavare un esempio? Grazie!!!

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

    Re: Blinking cell Jtable

    Originariamente inviato da rocklife
    E' scontato che devo realizzare un TableCellRenderer personalizzato per determinare il colore della riga
    Scontato al 100% proprio no ... nel senso che come avevo mostrato in un mio esempio tra i miei Java Examples, un'altra opzione per cambiare il background di una riga è quella di estendere JTable e fare l'override di prepareRenderer().

    E se appunto devi farlo per tutte le celle della riga (specialmente se volessi farlo senza dover sapere quali/quante sono), probabilmente la strada migliore è appunto questa.

    Originariamente inviato da rocklife
    ma il problema e' il blinking di una cella! Tale blinking inoltre deve essere centralizzato da un timer per l'intera applicazione
    Che ci debba essere un "timer" questo sì, è abbastanza scontato. (l'alternativa tecnica sarebbe un thread a parte che in ciclo con sleep fa "qualcosa" ma visto che presumo devi agire solo sulla interfaccia utente, meglio un javax.swing.Timer).

    La questione è che una cella si aggiorna (ovvero succede: 1) JTable va a prendere il dato dal model 2) determina il renderer 3) gli passa l'oggetto 4) ottiene il Component che "stampa" nella cella) solo quando è il model che "notifica" i listener registrati (la tabella si registra). Quindi vuol dire che ad ogni evento del timer dovresti invocare fireTableRowsUpdated di AbstractTableModel (o sottotipo) per dire "guardate che la riga è da aggiornare".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ma come faccio a recuperare la singola cella della riga e cambiarle colore alla sola cella e non a tutta la riga???

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rocklife
    Ma come faccio a recuperare la singola cella della riga e cambiarle colore alla sola cella e non a tutta la riga???
    Se ti serve aggiornare solo una cella (o più .. poche altre, insomma non tutta la riga) allora sì, un renderer ci vorrebbe, magari anche solo come "wrapper" del renderer reale visto che dovrebbe solo cambiare lo sfondo del Component, qualunque componente sia. E la notifica dal model idem ci dovrebbe essere, cambiando solo il fireXXX da usare.
    La questione principale comunque è quella di vedere se il colore di una cella dipende dal suo contenuto, dal contenuto di un'altra cella o da qualcos'altro di ancora più articolato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Il colore della cella dipende sia dal suo contenuto che da un'ulteriore flag. Ma il render per recuperare la singola cella e non tutta la riga come dovrei implementarlo? e di conseguenza come impostarli i diversi colori del blinking esternamente al renderer? Grazie

  6. #6
    Il Test che ho fatto e' il seguente: ho implementato un cellRendere con delle label di cui le label della prima colonna (quella che deve lampeggiare) le definite fisse creando n oggetti (lo posso fare perche' sono che la max size della tabella e' 5). In questo modo posso recuperare la singola label che devo cambiare il colore. Ad ogni modifica di colore applico un fireTableRowsUpdated come tu mi hai consigliato... ma purtroppo il colore della label della cella non cambia!!!!!

  7. #7
    Ho risolto.... in pratica sbagliavo perche' nel rendere per quelle celle impostavo un colore di background... quindi che succedeva:
    1) il timer cambiava il colore della cella
    2) refresh della tabella che chiamava il cell rendere
    3) il cell renderer impostava lo sfondo
    4) non si vedeva nessuna modifica grafica perche' reimpostava sempre lo stesso colore!!

    Quindi mi e' stato sufficiente non assegnare un colore di sfondo per quella particolare colonna!!!

  8. #8
    Ma se ho una tabella in cui non conosco a priori il numero di righe da allocare come faccio?????

  9. #9
    UP

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.