Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    74

    [java] Modifica colori celle JTable

    Ciao ho realizzato una tabella con alcune celle di colore diverso da quello di default.
    Il colore delle celle dovrebbero cambiare quando si immettono determinati valori all'interno delle stesse;fintato che modifico il parametro della cella che "comanda" il cambiamento del colore,questa si aggiorna immediatamente mentre le altre devo selezionarle per visualizzare il cambiamento di sfondo.
    Come posso richiamare un update di tutte le celle all'interno del preparedRenderer?
    Grazie

    codice:
       
    table=new JTable(addTableModel){
            //Implemento i toolTips per l'intestazione della tabella
                protected JTableHeader createDefaultTableHeader() {
                return new JTableHeader(columnModel) {
                        public String getToolTipText(MouseEvent e) {
                        Statement statement;
                        ResultSet resultSet; 
                        ResultSetMetaData metaData;
                        String tip = null;
                        java.awt.Point p = e.getPoint();
                        int index = columnModel.getColumnIndexAtX(p.x);
                        int realIndex = columnModel.getColumn(index).getModelIndex();
                      //mi connetto al database per ottenere una query 
                        String[] valori=new String[table.getColumnCount()];
                        try{
                        statement=MainFrame.connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,resultSet.CONCUR_READ_ONLY);
                        resultSet=statement.executeQuery(MainFrame.DEFAULT_QUERY);
                        metaData=resultSet.getMetaData();
                        for(int c=0;c<table.getColumnCount();c++){
                            valori[c]=metaData.getColumnName(c+1);
                        }
                        }
                        catch(SQLException sqle){JOptionPane.showMessageDialog(null,sqle.getMessage(),"Errore DataBase",JOptionPane.ERROR_MESSAGE);sqle.printStackTrace();}
                        
                        return valori[realIndex];
                       }
                     };
                  }
                //renderer per creare le caselle colorate
                   public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
                   Component rendererComponent = super.prepareRenderer(renderer, row, col);
                  
                   String valore=String.valueOf(table.getValueAt(row,2));{
                   //coloro la cella della colonna 1 di rosso se il valore della cella 2 è teorico 
                       if(valore.equals("teorico")&&col==1){
                         rendererComponent.setBackground(new Color(255,58,43));
                         }
                    //tutte le celle verdi se il valore della cella della colonna 16 è Si
                       else if(String.valueOf(table.getValueAt(row,16)).equals("Si")){
                         rendererComponent.setBackground(new Color(193,255,193));//193,255,193
                          }
                        else{
                          //Altrimenti lo sfondo è bianco
                          rendererComponent.setBackground(Color.WHITE);
                          }
                       }
                        return rendererComponent;
                };
           };

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

    Re: [java] Modifica colori celle JTable

    Originariamente inviato da cavaalb
    Come posso richiamare un update di tutte le celle all'interno del preparedRenderer?
    Non deve essere fatto in preparedRenderer! Deve solo preparare la cella alla tal riga/colonna. Insomma, qui può fare la logica particolare che vuole, prendendo eventualmente dati da più parti ma comunque il tutto focalizzato solo a preparare il componente per quella singola cella.

    È il table model che è in grado di "notificare" la view del refresh di una o più celle in base ad un cambiamento di stato interno al table model stesso. Non hai precisato quale table model stai usando, se una implementazione predefinita o uno tuo. Se hai necessità che la modifica di una cella (fatta programmaticamente o da edit dell'utente, è indifferente) vada a ripercuotersi anche su altre celle, allora valuta l'implementazione di un table model con una tua struttura dati o come specializzazione di uno preesistente.

    Insomma, quando il table model riceve l'invocazione del setValueAt, è lì che, oltre ad aggiornare il dato (o i dati) nella sua struttura dati, può notificare tutti i TableModelListener registrati indicando quale/i cella/e far aggiornare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    74
    Hai ragione inserendo il metodo fireTableDataChanged() nel setValueAt() i colori della tabella si aggiornano immediatamente.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cavaalb
    Hai ragione inserendo il metodo fireTableDataChanged() nel setValueAt() i colori della tabella si aggiornano immediatamente.
    Solo una nota: in AbstractTableModel, fireTableDataChanged è il fire quasi più "estremo" (quello più estremo di tutti è fireTableStructureChanged) perché fa aggiornare tutte le celle. Ma esistono anche fireTableRowsUpdated e fireTableCellUpdated.
    Puoi anche combinarne di più insieme nel setValueAt (es. un cella deve essere aggiornata e far aggiornare anche una riga di totali).
    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.