Fonta_88
23-01-2010, 11:52
Ciao a tutti,
sto programmando in java (su eclipse) una calcolatrice molto semplice, presa da un tutorial che ho trovato su internet, è composta da una finestra che estende la classe JFrame e contiene oggetti JButton e un'etichetta (il display) creato da JTextField.
Il codice è di per sè corretto, in quanto non rileva errori, ma quando istanzio un oggetto di classe Finestra nel main mi dà un errore...:muro:
In particolare il messaggio di errore è:
"No enclosing instance of type GUI_1 is accessible. Must qualify the allocation with an enclosing instance of type GUI_1 (e.g. x.newA() where A is an instance of GUI_1)."
Dove GUI_1 è il nome della classe principale e del progetto (che devono essere uguali, no?)... Qualcuno sa dirmi cosa non va?
lascio qui sotto il codice...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI_1 {
public class CalcFinestra extends JFrame{
private JTextField display;
private CalcPannello tastiera;
private double operandoCorrente = 0.0;
private char operatoreCorrente = '?';
private boolean resetDisplay = true;
public CalcFinestra(String Testo){
super(Testo);
display = new JTextField();
tastiera = new CalcPannello(this);
add(display,BorderLayout.NORTH);
add(tastiera,BorderLayout.CENTER);
display.setEditable(false);
display.setFont(new Font("SansSerif", Font.ITALIC, 22));
display.setHorizontalAlignment(JTextField.RIGHT);
display.setBackground(Color.WHITE);
}
public void inseritaCifra(char c){
if(resetDisplay=true){
display.setText("");
resetDisplay = false;
}
display.setText(display.getText()+c);
}
public void inseritoPunto(char c){
if(resetDisplay = true){
display.setText("");
resetDisplay = false;
}
display.setText(display.getText()+c);
}
public void inseritoOperatore(char c){
if (c=='='){
if(operatoreCorrente != '?'){
double operando = Double.parseDouble(display.getText()); //se è stato selez. = e l'operatore corrente non è ? allora converto il numero in display in numero con la virgola e lo salvo in operando
double risultato = calcolaRisultato(operandoCorrente, operando, operatoreCorrente);
display.setText(String.valueOf(risultato)); // scrivo a display il valore di risultato dopo averlo convertito in stringa
operatoreCorrente = '?';
resetDisplay = true;
}
} else {
if(operatoreCorrente == '?'){
operandoCorrente = Double.parseDouble(display.getText()); // vuol dire che non ho operazioni in ballo e che devo salvare il primo termine dell'operazione
} else {
double operando = Double.parseDouble(display.getText()); // vuol dire che ho un'operazione in ballo, llora salvo il termine in operando
operandoCorrente = calcolaRisultato(operandoCorrente, operando, operatoreCorrente); // ho risolto l'operazione ma non ho permuto uguale, così alvo il risultato in operatoreCorrente xk sono in attesa di 1 nuova operazione
display.setText(String.valueOf(operandoCorrente));
}
operatoreCorrente = c;
resetDisplay = true;
}
}
}
public double calcolaRisultato(double op1, double op2, char oper){
switch (oper) {
case '+' : return (op1+op2);
case '-' : return (op1-op2);
case '*' : return (op1*op2);
case '/' : return (op1/op2);
default : return 0.0;
}};
public class CalcPannello extends JPanel{
private JButton bottoni[] = {new JButton("1"), new JButton("2"), new JButton("3"), new JButton("4"), new JButton("5"), new JButton("6"), new JButton("7"), new JButton("8"), new JButton("9"), new JButton("0"), new JButton("+"), new JButton("-"), new JButton("*"), new JButton ("/"), new JButton("=")};
private CalcFinestra mainFrame;
public CalcPannello(CalcFinestra calcFin){
mainFrame = calcFin;
setLayout(new GridLayout(4,4));
}
private class BottoniListener implements ActionListener{ // ho usato implements perchè è un'interfaccia derivata, non una classe derivata
public void actionPerformed(ActionEvent ev){
JButton pressed = (JButton)ev.getSource();
char c = pressed.getText().charAt(0);
if ((c>='0') && (c<= '9')){
mainFrame.inseritaCifra(c);
}else if (c=='.'){
mainFrame.inseritoPunto();
}else {
mainFrame.inseritoOperatore(c);
}
}
}
}
public static void main(String[] args){
String s = "Calcolatrice";
CalcFinestra calcolatriceFinestra = new CalcFinestra(s);
calcolatriceFinestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calcolatriceFinestra.setSize(300,300);
calcolatriceFinestra.setVisible(true);
}
}
sto programmando in java (su eclipse) una calcolatrice molto semplice, presa da un tutorial che ho trovato su internet, è composta da una finestra che estende la classe JFrame e contiene oggetti JButton e un'etichetta (il display) creato da JTextField.
Il codice è di per sè corretto, in quanto non rileva errori, ma quando istanzio un oggetto di classe Finestra nel main mi dà un errore...:muro:
In particolare il messaggio di errore è:
"No enclosing instance of type GUI_1 is accessible. Must qualify the allocation with an enclosing instance of type GUI_1 (e.g. x.newA() where A is an instance of GUI_1)."
Dove GUI_1 è il nome della classe principale e del progetto (che devono essere uguali, no?)... Qualcuno sa dirmi cosa non va?
lascio qui sotto il codice...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI_1 {
public class CalcFinestra extends JFrame{
private JTextField display;
private CalcPannello tastiera;
private double operandoCorrente = 0.0;
private char operatoreCorrente = '?';
private boolean resetDisplay = true;
public CalcFinestra(String Testo){
super(Testo);
display = new JTextField();
tastiera = new CalcPannello(this);
add(display,BorderLayout.NORTH);
add(tastiera,BorderLayout.CENTER);
display.setEditable(false);
display.setFont(new Font("SansSerif", Font.ITALIC, 22));
display.setHorizontalAlignment(JTextField.RIGHT);
display.setBackground(Color.WHITE);
}
public void inseritaCifra(char c){
if(resetDisplay=true){
display.setText("");
resetDisplay = false;
}
display.setText(display.getText()+c);
}
public void inseritoPunto(char c){
if(resetDisplay = true){
display.setText("");
resetDisplay = false;
}
display.setText(display.getText()+c);
}
public void inseritoOperatore(char c){
if (c=='='){
if(operatoreCorrente != '?'){
double operando = Double.parseDouble(display.getText()); //se è stato selez. = e l'operatore corrente non è ? allora converto il numero in display in numero con la virgola e lo salvo in operando
double risultato = calcolaRisultato(operandoCorrente, operando, operatoreCorrente);
display.setText(String.valueOf(risultato)); // scrivo a display il valore di risultato dopo averlo convertito in stringa
operatoreCorrente = '?';
resetDisplay = true;
}
} else {
if(operatoreCorrente == '?'){
operandoCorrente = Double.parseDouble(display.getText()); // vuol dire che non ho operazioni in ballo e che devo salvare il primo termine dell'operazione
} else {
double operando = Double.parseDouble(display.getText()); // vuol dire che ho un'operazione in ballo, llora salvo il termine in operando
operandoCorrente = calcolaRisultato(operandoCorrente, operando, operatoreCorrente); // ho risolto l'operazione ma non ho permuto uguale, così alvo il risultato in operatoreCorrente xk sono in attesa di 1 nuova operazione
display.setText(String.valueOf(operandoCorrente));
}
operatoreCorrente = c;
resetDisplay = true;
}
}
}
public double calcolaRisultato(double op1, double op2, char oper){
switch (oper) {
case '+' : return (op1+op2);
case '-' : return (op1-op2);
case '*' : return (op1*op2);
case '/' : return (op1/op2);
default : return 0.0;
}};
public class CalcPannello extends JPanel{
private JButton bottoni[] = {new JButton("1"), new JButton("2"), new JButton("3"), new JButton("4"), new JButton("5"), new JButton("6"), new JButton("7"), new JButton("8"), new JButton("9"), new JButton("0"), new JButton("+"), new JButton("-"), new JButton("*"), new JButton ("/"), new JButton("=")};
private CalcFinestra mainFrame;
public CalcPannello(CalcFinestra calcFin){
mainFrame = calcFin;
setLayout(new GridLayout(4,4));
}
private class BottoniListener implements ActionListener{ // ho usato implements perchè è un'interfaccia derivata, non una classe derivata
public void actionPerformed(ActionEvent ev){
JButton pressed = (JButton)ev.getSource();
char c = pressed.getText().charAt(0);
if ((c>='0') && (c<= '9')){
mainFrame.inseritaCifra(c);
}else if (c=='.'){
mainFrame.inseritoPunto();
}else {
mainFrame.inseritoOperatore(c);
}
}
}
}
public static void main(String[] args){
String s = "Calcolatrice";
CalcFinestra calcolatriceFinestra = new CalcFinestra(s);
calcolatriceFinestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calcolatriceFinestra.setSize(300,300);
calcolatriceFinestra.setVisible(true);
}
}