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:
Classe JTabbedPane2: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
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.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
Aiutatemi per favore che sto impazzendo.

Rispondi quotando