Newsgroup: it.comp.java
Titolo: Aggiornamento di un JScrollPane

Salve,
Ho un JFrom nel quale e' inserito un JScrollPane. Nella JViewport ho 
inserito un JPanel con della JLabel.
Il problema e' che cambiando il contenuto delle JLabel con .setText() non mi 
cambia la visualizzazione, mentre ho verificato con un .getText() che 
effettivamente il contenuto e' cambiato.
Ho tentato tutti i vari paint(), repaint() e simili sulle JLabel, sul JPanel 
e sul JScrollPane.
Immagino sia il JScrollPane che congela il suo contenuto, visto che con le 
JLabel al di fuori non ho questo problema...
Qualcuno sa come si puo' forzare l'aggiornamento?
Grazie,
Roberto 


Hai provato con il metodo jscrollpane.revalidate() o
jscrollpane.invalidate()????

 jscrollpane.invalidate()????
Si... ma nessun risultato... :( 


Prova a postare una classe di prova che dimostri questo comportamento.
In questo modo potremo analizzarla in dettaglio per scoprirne
eventuali difetti.

La classe incriminata e' questa, ho lasciato solo la parte in cui viene 
inizializzato il jScrollPane (jMainGrid) e quella in cui viene aggiornato:
    private class DataTable {
        ArrayList<String> CalName;
        ArrayList<String> ColName;
        JPanel CHeader;
        JPanel RHeader;
        JPanel Table;
        DataRecord[][] Grid;
        JLabel GridCell[][];
        int nrows,ncols;
[...]
        public void initGrid() {
            int x,y,i;
            ncols=CalName.size();
            nrows=ColName.size();
            Grid=new DataRecord[ncols][nrows];
            for (y=0; y<nrows; ++y)
                for (x=0; x<ncols; ++x)
                    Grid[x][y]=null;
            //
            RHeader=new JPanel();
            RHeader.setPreferredSize(new Dimension(140,25*nrows));
            RHeader.setLayout(null);
            for (i=0; i<nrows; ++i) {
                JLabel app=new JLabel();
                app.setFont(new java.awt.Font("Arial", 0, 12));
                app.setText(" "+ColName.get(i));
                app.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
                RHeader.add(app);
                app.setBounds(0,i*25,140,25);
            }
            jMainGrid.setRowHeaderView(RHeader);
            //
            CHeader=new JPanel();
            CHeader.setPreferredSize(new Dimension(60*ncols,25));
            CHeader.setLayout(null);
            for (i=0; i<ncols; ++i) {
                JLabel app=new JLabel();
                app.setFont(new java.awt.Font("Arial", 0, 12));
                app.setText(CalName.get(i));
                app.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
                app.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
                CHeader.add(app);
                app.setBounds(60*i,0,60,25);
            }
            jMainGrid.setColumnHeaderView(CHeader);
            //
            Table=new JPanel();
            Table.setPreferredSize(new Dimension(60*ncols,25*nrows));
            Table.setLayout(null);
            GridCell=new JLabel[ncols][nrows];
            for (y=0; y<nrows; ++y)
                for (x=0; x<ncols; ++x) {
                    GridCell[x][y]=new JLabel();
                    GridCell[x][y].setOpaque(true);
                    GridCell[x][y].setBackground(Color.WHITE);
                    GridCell[x][y].setFont(new java.awt.Font("Arial", 0, 
12));
                    GridCell[x][y].setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
                    GridCell[x][y].setBorder(javax.swing.BorderFactory.createLineBorder(new 
java.awt.Color(0,0,0)));
                    Table.add(GridCell[x][y]);
                    GridCell[x][y].setBounds(60*x-1,25*y-1,61,26);
            }
            jMainGrid.setViewportView(Table);
        }
[...]
        public void updateValueInGrid() {
            for (int y=0; y<nrows; ++y)
                for (int x=0; x<ncols; ++x) {
                    if (Grid[x][y]!=null) { 
GridCell[x][y].setText(Grid[x][y].value());
                    System.out.println(""+x+", "+y+"= 
"+GridCell[x][y].getText());
                    } else GridCell[x][y].setBackground(Color.LIGHT_GRAY);
                    GridCell[x][y].repaint();
                }
        }
} 


Per dare la possibilità al maggior numero di persone possibili di
capire il tuo codice, dovresti sforzarti di fare questo:
- creare una piccola classe che dimostri, nella maniera più semplice
possibile il comportamento anomalo.
- verificare che, lanciando quella classe di prova, si verifichi
effettivamente il comportamento incriminato
- postare questa piccola classe e lasciarla analizzare.
Ti dico questo per due ragioni: la prima è che realizzando una classe
di test molto semplice molte persone potranno lavorarci sopra per
analizzare il problema senza dover comprendere il contesto dei campi e
dei metodi che hai scritto dando loro anche la possibilità di
effettuare il debug, la seconda ragione è che nella maggior parte
delle volte, ricreare il comportamento in un ambiente di test (la
nuova classe che dovresti realizzare) ti da (e parlo da programmatore
che ha dovuto affrontare problematiche simili alla tua) la possibilità
di scovare bug nel codice che, all'interno del tuo programma, sarebbe
più difficile individuare.
Detto questo ora proverò a verificare il codice e se riuscirò a
comprendere il problema sarò felice di fartelo sapere :-))

 - postare questa piccola classe e lasciarla analizzare.
L'ho fatta... e "purtroppo" funziona... quindi o si tratta di un mio errore 
in fase di preparazione del JScrollPane oppure e' un problema che si 
verifica utilizzando Matisse...
Boh... non so che pesci pigliare...
ciao,
Roberto

 JScrollPane oppure e' un problema che si verifica utilizzando Matisse...
Era la prima...


Ne deduco che il problema sia stato risolto. :-)

> Ne deduco che il problema sia stato risolto. :-)
Si, comunque grazie... Seguendo la tua indicazione di scrivere una classe 
base che evidenziasse il problema ho capito dove NON era l'errore  e ho 
concentrato l'attenzione altrove.
Grazie ancora,
Roberto 


Figurati! ^_-