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

    Cambiare colore riga tabella in funzione di determinanti valori

    Vorrei che la riga della tabella diventasse gialle se la data formulario e' successiva alla data fattura. Con questo codice tutte le righe diventano gialle

    codice:
    try{
    dataFattura = format.parse(tfDataFt.getText());
    }catch(ParseException ex){
    Logger.getLogger(FatturaClientiScheda.class.getName()).log(Level.SEVERE,null, ex);
    }
    tabella.setDefaultRenderer(Object.class,newDefaultTableCellRenderer(){
    @Override
    publicComponent getTableCellRendererComponent(JTable table,
    Object value,boolean isSelected,boolean hasFocus,int row,int col){
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
    try{
    dataFormulario = format.parse((String) model.getValueAt(row,1));
    }catch(ParseException ex){
    Logger.getLogger(FatturaClientiScheda.class.getName()).log(Level.SEVERE,null, ex);
    }
    if(dataFormulario.after(dataFattura))
    {
    setBackground(Color.yellow);
    }
    returnthis; 
    } 
    });


  2. #2
    ciao!

    io mi sono creato una classe apposita che estende DefaultTableCellRenderer.
    prova a vedere se può esserti d'aiuto:
    codice:
    public class AlternateRowsColor extends DefaultTableCellRenderer {
    
        private Color currentColor;
    
        public AlternateRowsColor() {
            setOpaque(true);
        }
    
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean focused, int row, int col) {
            if (row % 2 == 0) {
                currentColor = Color.white;
            } else {
                currentColor = new Color(222, 222, 225);
            }
            if (selected) {
                super.setForeground(table.getSelectionForeground());
                super.setBackground(table.getSelectionBackground());
            } else {
                super.setForeground(Color.black);
                super.setBackground(currentColor);
            }
            setFont(table.getFont());
            setValue(value);
            return this;
        }
    }
    io faccio il cambio di colore se la riga è pari o dispari.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    [COLOR=#101094]Vorrei che la riga della tabella diventasse gialle se la data formulario e' successiva alla data fattura. Con questo codice tutte le righe diventano gialle
    Dato che il renderer l'hai associato esplicitamente a Object.class, se tutte le colonne nel model indicano Object.class, vuol dire che il tuo renderer sarà usato da tutte le colonne.

    E siccome il renderer viene invocato ogni volta che una cella deve essere aggiornata ma tipicamente il Component gestito è sempre lo stesso, vuol dire che lo stato del componente è "globale" e quindi devi sempre aggiornarlo.
    Non puoi dire: se x vale A allora imposta giallo. E se x non è A?


    P.S. non postare codice "colorato", perché è un disastro quotarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Ho corretto così. Ma io voglio che ilcontrollo avvenga quando clicco un pulsante.
    tabella.setDefaultRenderer(String.class, new DefaultTableCellRenderer(){
    @Override
    public Component getTableCellRendererComponent(JTable table,
    Object value,boolean isSelected,boolean hasFocus,int row,int col){

    Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
    try{
    dataFormulario = format.parse((String) model.getValueAt(row,1));
    }catch(ParseException ex){
    Logger.getLogger(FatturaClientiScheda.class.getNam e()).log(Level.SEVERE,null, ex);
    }
    if(dataFormulario.after(dataFattura))
    {
    setBackground(Color.yellow);
    }
    return c;
    }
    });

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    Ho corretto così. Ma io voglio che ilcontrollo avvenga quando clicco un pulsante.
    Allora dovresti mantenere uno "stato" (da qualche parte) che dice se fare questa logica di evidenziazione oppure no. Ovviamente poi dovrà essere testato nel renderer.
    A seguito della azione sul pulsante, setti lo stato a "fai la evidenziazione" e poi chiedi un refresh completo della tabella (altrimenti il renderer non verrebbe invocato).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.