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.