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

    Colorare Background JTable

    Ciao a tutti! ho una richiesta un po particolare:
    Ho una JTable chel'utente popola manualmente, ad un certo punto clicco salva e il programma fa check della coerenza dei dati (devono essere tutti double), se non sono double il programma si ferma e dovrebbe colorare le celle non double di rosso... come fare? Avete qualche idea?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non è semplice: devi predisporre un apposito renderer che colora la singola cella se questa ha un determinato valore (che sarai tu ad impostare nel model).

    Siccome il Renderer andrebbe impostato su ogni colonna della tabella, esiste la via più semplice che consiste nel estendere la classe JTable e ridefinire il metodo prepareRenderer():

    codice:
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
       Component rendererComponent = super.prepareRenderer(renderer, row, column);
    
       if ( condizione_per_colorare_la_cella ) {
          // Se la condizione è soddisfatta, coloro la cella di rosso
          rendererComponent.setBackground( Color.RED );
       }
    
       return rendererComponent;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Allora dovendo modificare obbligatoriamente il renderer si può fare in modo che durante la digitazione se non si inseriscono numeri (Double) la casella diventi rossa ( o con il bordo rosso) net beans lo faceva quando creavo le interfacce con la modalità grafica ma non ho proprio capito come... Grazie!
    ah quindi aggiornare una variabile globale del tipo true se tutte sono ok, false se c'è qlc non double!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Lory1990
    Allora dovendo modificare obbligatoriamente il renderer si può fare in modo che durante la digitazione se non si inseriscono numeri (Double) la casella diventi rossa ( o con il bordo rosso) net beans lo faceva quando creavo le interfacce con la modalità grafica ma non ho proprio capito come... Grazie!
    Certo... non in fase di digitazione, ma subito dopo la digitazione, quando il valore viene assegnato nel model.

    ah quindi aggiornare una variabile globale del tipo true se tutte sono ok, false se c'è qlc non double!
    Io prevederei un campo particolare nell'oggetto del model, in modo da poter avere la cella esatta colorata in caso di errore nella digitazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    si, esatto proprio così! ma come si fa?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    L'esempio per la JTable l'ho scritto sopra.
    Per il resto si tratta di saper un minimo lavorare con le JTable: immagino tu sappia che una JTable è composta da diversi elementi (un TableModel che rappresenta i dati della tabella, i renderer per la visualizzazione dei dati, gli editor per l'editazione dei dati, ecc).

    Il TableModel, in particolare, serve a contenere i dati: tali dati possono essere di qualunque tipo (tipi "naturali" come numeri o stringhe o tipi "complessi" come oggetti custom). Io non ho idea di quali dati tu stia trattando, ma è importante che tu sappia come individuare un dato che per te è "errato". Se riesci a marcarlo in qualche modo, il gioco è fatto perchè usando il codice di esempio che ho postato sopra riesci a capire se la particolare cella (che contiene quel dato) è da colorare oppure no.

    Se sei in difficoltà sul trattamento dei tuoi dati, il consiglio è di studiare per bene il funzionamento delle JTable partendo dal tutorial. L'argomento è molto più complesso di quello che si può immaginare al primo colpo (specialmente se si commette il madornale errore di farsi fare le JTable da un IDE: l'IDE non ti fa capire come funziona una JTable e ti nasconde troppi dettagli per poter lavorare così a fondo come chiedi tu, senza contare che genera codice pessimo).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Assolutamente! Ho usato l'IDE solo per capire i comandi principali, per quanto riguarda la progrttazione vera e propria ho fatto tutto a mano, ho capito comunque quello che mi vuoi dire: definisco una nuova classe MyTable e faccio l'override del metodo sopra e poi ci pensaa tutto il programma.

    Ultima cosa: il mio programma inizia a diventare consistente: devo usare 6 JTable e 6 matrici di double molto grandi per contenere tutti questi dati... se passassi da delle matrici double a Double ci sarebbe un calo prestazionale visibile?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Lory1990
    Assolutamente! Ho usato l'IDE solo per capire i comandi principali, per quanto riguarda la progrttazione vera e propria ho fatto tutto a mano, ho capito comunque quello che mi vuoi dire: definisco una nuova classe MyTable e faccio l'override del metodo sopra e poi ci pensaa tutto il programma.
    Diciamo di sì.

    Ultima cosa: il mio programma inizia a diventare consistente: devo usare 6 JTable e 6 matrici di double molto grandi per contenere tutti questi dati... se passassi da delle matrici double a Double ci sarebbe un calo prestazionale visibile?
    No, non hai alcun calo delle prestazioni. Considera, inoltre, che quando JTable crea i renderer e, soprattutto, gli editor per tali dati in buona sostanza deve convertire lei i valori da primitivi a oggetti. Se glieli dai già tu in tale forma, risparmi del lavoro a JTable.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.