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

    Valori di Variabili colacolate nel metodo paintComponent

    Ho un problema con il valore di una variabile calcolata nel metodo paintComponet la quale se pur restituita con u apposito metodo get, nel programma chiamate mi viene riportato sempre il suo valore precedente!!
    Nel caso particolare, la variabile in questione, denominata energy è definita in alcuni pannelli che realizzano dei grafi.
    Quando richiamo tale metodo dalla classe JTabbedPane2, mediante selezione dei pannelli di un JTabbedPane, questi mi restituisce il valore di energy associato al grafo precedente.
    Credo che questo sia dovuto dal fatto che il valore della variabile energy sia calcolato nel metodo paintComponent.
    Di seguito ti riporto uno stralcio di codice.

    Classe che realizza un grafo:
    codice:
    class ggPanel extends JPanel{ 
    	//costo energia
            double energy;
    [...]
    
    public double getEnergy(){
        	return energy;
    }//getEnergy
            
    public void paintComponent(Graphics g){
    	super.paintComponents(g);
    [...]                        	
    energy +=Math.pow(nodes[kaw].getD(nodes[law].getXPos(), nodes[law].getYPos()),2.0);
                            [...]
    }//paintComponent
    	
    }//ggPanel
    Classe JTabbedPane2:
    codice:
    public class JTabbedPane2 extends JFrame {
    	
    [...]	
            public JTabbedPane2(int l, int a, int Np, Vector list){
            		
    		super("JTabbedPaneExample");
    			        
         [...]		
    getContentPane().setLayout(new BorderLayout());
    		
    	credits = new JLabel("Copyrigth Giuseppe SPECCHIO matr.515680UG");
                    getContentPane().add(credits, BorderLayout.SOUTH);
                    
    	[...]
    		tabbedPane = new JTabbedPane();
    
    		gpanel = new ggPanel(lun, alt, Num, vect);
    		gpanel.setLayout(null);
    		
    		rpanel = new rngPanel(lun, alt, Num, vect);
                    cpanel = new clumpPanel(lun, alt, Num, vect);
                    mstpanel = new mstaPanel(lun, alt, Num, vect);
                    
                    //gestore eventi
                    tabbedPane.addChangeListener(new TabListener());
                    //definisco ed inserisco le schede
                    tabbedPane.addTab("Gabriel Network", gpanel );
                    tabbedPane.addTab("Relative Neighborhood Network", rpanel );
                    tabbedPane.addTab("Clump Network", cpanel);
                    tabbedPane.addTab("Minimun Spanning Tree", mstpanel);
                    
    		//inserisco il pannello nel contenitore
                    getContentPane().add(tabbedPane, BorderLayout.CENTER);
                    
                    [...]
             }
             
            /**
            	Gestore eventi del pannello dei grafi
            */
            public class TabListener implements ChangeListener {
            	public void stateChanged(ChangeEvent e) {
            		//System.out.println("***DEBUG: stateChanged !");
            		//fornisce la posizione in cui ci troviamo
            		int pos = tabbedPane.getSelectedIndex();
            		//System.out.println("***DEBUG index = "+pos);
            		if(pos==0){
            			credits.setText("Tgg = "+tgg+" ms "+"Egg = "+formattatore.format(gpanel.getEnergy()));
            		}else if(pos==1){
            			credits.setText("Trng = "+trng+" ms "+"Erng = "+formattatore.format(rpanel.getEnergy()));
            		}else if(pos==2){
            			credits.setText("Tclump = "+tclump+" ms "+"Eclump = "+formattatore.format(cpanel.getEnergy()));
            		}else if(pos==3){
            			credits.setText("Tmst = "+tmst+" ms "+"Egg = "+formattatore.format(mstpanel.getEnergy()));
            		}
            		//imposta il tiolo del frame in base alla scheda selezionata
            		String title = tabbedPane.getTitleAt(pos);
            		setTitle(title);
            	}//stateChanged
            }//TabListener
    Come credo che si possa capire ho crealizzato una classe che gestisce gli eventi JTabbedPane, nella quale ogni volta che si cambia scheda viene aggiornato il tempo e l'energia di simulazione del grafo associato alla tabella. Tali valori vengono visualizzati all'interno di una etichetta credits posta in un pannello nella zona SOUTH del BorderLayout.
    Aiutatemi per favore che sto impazzendo.
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Penso tu debba fare in modo che ogni volta che aggiorni la var venga chiamato il metodo repaint().
    Altrimenti l'aggiornamento non viene mai visualizzato.

  3. #3
    saresti così gentile da farmi un esempio pratico?
    Giuseppe SPECCHIO

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.