Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    2

    Colorare cella JTable non selezionata dall'utente

    Salve a tutti.
    Ho appena creato un render che colora una singola cella di una JTable
    codice:
    public class CellRender extends DefaultTableCellRenderer{    
        @Override     
               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.GREEN); 
                       return cell;     
    } }
    Mentre nel file dove inizializzo lo cella ho inserito
    codice:
    table.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer());
           table.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer());    
    table.getColumnModel().getColumn(2).setCellRenderer(new DefaultTableCellRenderer());
            table.getColumnModel().getColumn(3).setCellRenderer(new DefaultTableCellRenderer());
            table.getColumnModel().getColumn(4).setCellRenderer(new DefaultTableCellRenderer());       
            table.getColumnModel().getColumn(5).setCellRenderer(new DefaultTableCellRenderer());
    I problemi che riscontro sono 2:
    1 - così facendo, la cella si colora solo quando l'utente la seleziona, io invece dispongo del valore della riga e della colonna della cella che vorrei colorare quando preferisco io, senza dover attendere un input(vorrei quindi che il render prendesse in ingresso 2 valori interi che corrispondono alla riga e alla colonna della cella e la colorasse )

    2 - se coloro 2 celle di una stessa colonna, vengono colorate anche tutte le celle di quella colonna comprese tra la prima e la seconda cella selezionata.

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

    Re: Colorare cella JTable non selezionata dall'utente

    Originariamente inviato da rexjaa
    Mentre nel file dove inizializzo lo cella ho inserito
    codice:
    table.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer());
    table.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer());    
    table.getColumnModel().getColumn(2).setCellRenderer(new DefaultTableCellRenderer());
    table.getColumnModel().getColumn(3).setCellRenderer(new DefaultTableCellRenderer());
    table.getColumnModel().getColumn(4).setCellRenderer(new DefaultTableCellRenderer());       
    table.getColumnModel().getColumn(5).setCellRenderer(new DefaultTableCellRenderer());
    Scusa ma io in queste righe non vedo l'uso del "tuo" CellRender.

    Originariamente inviato da rexjaa
    1 - così facendo, la cella si colora solo quando l'utente la seleziona
    No, se assegni il tuo CellRender ad una colonna specifica, tutte le celle di quella colonna avranno il testo verde .... indipendentemente dalla/e righe/celle selezionate. Il tuo setForeground(Color.GREEN) è una impostazione che "sovrascrive" qualunque logica che DefaultTableCellRenderer ha per determinare il foreground.

    Originariamente inviato da rexjaa
    io invece dispongo del valore della riga e della colonna della cella che vorrei colorare quando preferisco io, senza dover attendere un input(vorrei quindi che il render prendesse in ingresso 2 valori interi che corrispondono alla riga e alla colonna della cella e la colorasse )
    La questione essenziale è che il renderer da solo non fa nulla. Una cella viene rinfrescata o quando l'utente interagisce con la cella (es. termina l'editing), o l'utente scrolla la tabella (e la cella (ri)appare magari) o quando è il table model che notifica la "view" di un cambiamento.

    Quindi certamente potresti mettere nel tuo renderer 2 variabili riga/colonna per colorare solo quella cella ma poi devi far causare il refresh in qualche modo. E non è il renderer che può/sa farlo.

    Originariamente inviato da rexjaa
    2 - se coloro 2 celle di una stessa colonna, vengono colorate anche tutte le celle di quella colonna comprese tra la prima e la seconda cella selezionata.
    Questa non l'ho capita ... nel senso che come ho detto prima, il tuo CellRender assegnato ad una colonna, colora il foreground di tutte le celle della colonna.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    2

    Re: Re: Colorare cella JTable non selezionata dall'utente

    Originariamente inviato da andbin
    Quindi certamente potresti mettere nel tuo renderer 2 variabili riga/colonna per colorare solo quella cella ma poi devi far causare il refresh in qualche modo. E non è il renderer che può/sa farlo.
    Che comando/procedimento dovrei eseguire per colorarne una singola date riga e colonna?

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

    Re: Re: Re: Colorare cella JTable non selezionata dall'utente

    Originariamente inviato da rexjaa
    Che comando/procedimento dovrei eseguire per colorarne una singola date riga e colonna?
    Io per fare una evidenziazione speciale di una singola/qualunque cella non andrei a implementare un apposito renderer. Innanzitutto perché bisognerebbe poi assegnarlo a tutte le colonne e a seconda del table model (non so cosa hai usato tu) e in base al "tipo" delle colonne, potrebbe non essere appropriato.

    Per queste cose semplici (es. "sovrascrivere" foreground o background di una cella precisa o di tutte le celle), esiste un'altra possibilità: estendere JTable e fare l'override di prepareRenderer (vedi signature sul javadoc).
    Un utilizzo di questa tecnica, ad esempio, è quando si voglio colorare tutte le righe in maniera "alternata".

    Attenzione ad una cosa: nella tua implementazione di prepareRenderer, non basta solo fare: se la cella (riga/colonna) è quella che mi aspetto la coloro es. di verde. Se non è quella cella, devi colorarla tu di un altro colore (es. esplicitamente bianco o il background da JTable) in modo da impostare un colore di base.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.