PDA

Visualizza la versione completa : [Java] Problema con variabile statica


zannas
23-06-2005, 10:19
salve a tutti ragazzi ho un problema con questo mini-programmino sapete darmi una mano?

// Java Document
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class variazione_percentuale_graph {
public Label Titolo;
public JButton Calcola;
public JTextField Valore1;
public JTextField Valore2;
public Float n1;
public Float n2;
public Float ris;
public Label Risultato;

public static void main(String[] args) {
//creo oggetti
Label Titolo = new Label("Variazione Percentuale tra Due numeri",1);

JButton Calcola = new JButton("Calcola!");
Calcola.addActionListener(new Ascoltatore());

JTextField Valore1 = new JTextField("00000");
JTextField Valore2 = new JTextField("00000");

Label Risultato = new Label("Non è ancra stato effettuato alcun calcolo");

//creo la finestra
JFrame Finestra = new JFrame("Variazione Percentuale tra due valori -- by Zannas.tk");
Finestra.setSize(10,10);
//inserisco gli oggetti
Finestra.setLayout(new BorderLayout());
Finestra.getContentPane().add(Titolo,BorderLayout. PAGE_START);

JPanel sx = new JPanel();
sx.add(Valore1);
sx.add(Valore2);
sx.add(Calcola);

Finestra.getContentPane().add(sx,BorderLayout.CENT ER);

Finestra.getContentPane().add(Risultato,BorderLayo ut.SOUTH);
//metto defualt bottone il Calcola
Finestra.getRootPane().setDefaultButton(Calcola);
//
Finestra.pack();
Finestra.setVisible(true);
}

//creo Ascoltatore evento che da il risultato
public class Ascoltatore implements ActionListener {
public void actionPerformed (ActionEvent evento) {
Float n1 = new Float(Valore1.getText());
Float n2 = new Float(Valore2.getText());
Float ris = new Float((n2*100/n1)-100);
Risultato.setText("Valore 1: "+n1+"\n Valore 2: "+n2+"\n Variazione Percentuale: "+ris+"%");
}
}
//fine tutto
}

Matteo982
23-06-2005, 10:21
potresti essere un pochino più specifico sul problema che hai? Così ti possiamo rispondere in maniera più utile! :)

Zalex
23-06-2005, 10:39
scusa ma che problema hai?

zannas
23-06-2005, 10:49
se compilo mi da questo errore:
variazione_percentuale_graph.java:21: non-static variable this cannot be referenced from a static context
Calcola.addActionListener(new Ascoltatore());
^
1 error

Andrea1979
23-06-2005, 11:01
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class variazione_percentuale_graph extends JFrame {
public Label Titolo;
public JButton Calcola;
public JTextField Valore1;
public JTextField Valore2;
public Float n1;
public Float n2;
public Float ris;
public Label Risultato;

public variazione_percentuale_graph() {
super("Variazione Percentuale tra due valori -- by Zannas.tk");
Titolo = new Label("Variazione Percentuale tra Due numeri",1);
Calcola = new JButton("Calcola!");
Calcola.addActionListener(new Ascoltatore());
Valore1 = new JTextField("00000");
Valore2 = new JTextField("00000");

Risultato = new Label("Non è ancra stato effettuato alcun calcolo");

//creo la this

this.setSize(10,10);
//inserisco gli oggetti
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(Titolo,BorderLayout.PAGE _START);
JPanel sx = new JPanel();
sx.add(Valore1);
sx.add(Valore2);
sx.add(Calcola);

this.getContentPane().add(sx,BorderLayout.CENTER);
this.getContentPane().add(Risultato,BorderLayout.S OUTH);
//metto defualt bottone il Calcola
this.getRootPane().setDefaultButton(Calcola);
//
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
}

public static void main(String[] args) {
variazione_percentuale_graph vpg = new variazione_percentuale_graph();

}

//creo Ascoltatore evento che da il risultato
class Ascoltatore implements ActionListener {
public void actionPerformed (ActionEvent evento) {
float n1 = Float.parseFloat(Valore1.getText());
float n2 = Float.parseFloat(Valore2.getText());
float ris = n2*100/n1-100;
Risultato.setText("Valore 1: "+n1+"\nValore 2: "+n2+"\nVariazione Percentuale: "+ris+"%");
}
}
//fine tutto
}

Ero in vena di fare regali.... ;)
Ciao

Zalex
23-06-2005, 11:05
hai un modo strano d programmare....
non mettere tutto nel main.

fai una classe variazione percentuale e la richiami dal main.

inoltre dovrebbe esserci un altro problema in questa riga:


Float ris = new Float((n2*100/n1)-100);

n2 e n1 sono oggetti. nn puoi fare una divisione o una moltiplicazione.

Zalex
23-06-2005, 11:11
ops sono stato preceduto :D

MatCap83
23-06-2005, 11:12
Uno dei consigli :smack: di "buona programmazione" e' quello di non mettere mai troppa roba nel main! La soluzione di Andrea1979 va bene, metti tutto nella classe principale e poi crei un semplice oggetto dal main, programmazione molto pulita....

zannas
23-06-2005, 11:15
ma porca miseria per non dire altro... cosa aveva il my script che non funzionava!!!!!!!!! :dhò: adesso funziona grazie Andrea1979. per cortesia mia mandi in privato il tuo indirizzo MSN Messanger? ne ho bisogno.. in java proprio non vado... PS:gia che ci sei mi spieghi che errore era il mio?

Andrea1979
23-06-2005, 11:29
Per quanto riguarda l'indirizzo del Messenger: non se ne parla proprio ;) Non perché tu non mi piaccia in maniera particolare, ma perché c'è il forum fatto apposta per fare le richieste. Un domani un tuo problema potrebbe essere simile al problema di qualcun altro... se te lo risolvono sul messenger, qui nessuno ci guadagna.

Per le spiegazioni...



Float x = new Float(valore)
crea un oggetto di tipo Float, che non è propriamente un float tipo numerico semplice.

Per fare i conti, ti ci voleva un float semplice.


float a = Float.Parsefloat(Stringa)
genera un float tipo primitivo da una stringa (o almeno ci prova).

Per l'altro problema, il primo -per cui il programma non compilava affatto- il metodo main è statico, mentre il tuo ascoltatore no. Sarebbe successa la stessa cosa se avessi tentato di utilizzare un qualunque altro signore non statico dentro un metodo statico.

Segui poi gli altri ingredienti generali per una programmazione più "pulita": riduci il main allo stretto necessario, adotta nomi per metodi e variabili che si confanno allo scopo per cui sono creati/invocati, fai uso oculato di costruttori e quant'altro.

Ti rimando ad un buon manuale di programmazione in Java (le librerie ne sono stracolme). Prendine uno di uso generale.
Ciao

Loading