Salve, sto creando una calcolatrice grafica in java, e tutto va benissimo, i pulsanti vanno, gli actionlistener funzionano. l'unica cosa sono... le operazioni. io uso questo metodo:
- con i tasti scrivi il numero
- quando premi un operatore immagazzino in una variabile il numero attuale
- quando premi uguale, il numero diventa l'operazione x, fra il numero immagazzinato e quello attuale
solo che i numeri sono ad esempio 12-2=-14 oppure 100*2=84
ecco il codice:
// importo packages
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// classe della finestra principale
public class Finestramenu extends Frame {
int opdef = 0, res = 0, adv = 0;
// bottoni base
JButton button = new JButton("=");
JButton b1=new JButton("1"); JButton bf=new JButton("Math");
JButton b2=new JButton("2"); JButton b3=new JButton("3");
JButton b4=new JButton("4"); JButton b5=new JButton("5");
JButton b6=new JButton("6"); JButton b7=new JButton("7");
JButton b8=new JButton("8"); JButton b9=new JButton("9");
JButton bp=new JButton("+"); JButton bx=new JButton("*");
JButton bd=new JButton("/"); JButton b0=new JButton("0");
JButton bm=new JButton("-"); JButton bn=new JButton("C");
// bottoni math
JButton blog=new JButton("log"); JButton bln=new JButton("ln");
JButton bcos=new JButton("cos"); JButton bsin=new JButton("sin");
JButton bpi=new JButton("pi"); JButton be=new JButton("e");
MenuItem aiuto=new MenuItem("Help");
MenuItem somma=new MenuItem("Somma");
MenuItem esci=new MenuItem("Esci");
Menu file= new Menu("File");
Menu edit= new Menu("Func");
Menu help= new Menu("Help");
MenuBar barra = new MenuBar();
JLabel risultato = new JLabel("*",JLabel.CENTER);
JTextField t1 = new JTextField();
JTextField t2 = new JTextField();
public Finestramenu() {
setupEventi();
setupElementi();
setLayout(new GridLayout(6,1));
edit.add(somma);
help.add(aiuto);
barra.add(file);
//barra.add(edit);
barra.setHelpMenu(help);
setMenuBar(barra);
// aggiungo elementi
add(t1); add(b1); add(b2); add(b3); add(b4);
add(b5); add(b6); add(b7); add(b8); add(b9);
add(b0); add(bp); add(bm); add(bd); add(bx);
add(bn); add(button); add(bf);
doLayout();
pack();
addWindowListener(new FinestramenuWindowListener());
}
// metodo main
public static void main(String[] arg) {
Finestramenu frame = new Finestramenu();
frame.setBounds(400,200,220,300);
frame.setVisible(true);
}
// Action Listener del Menu
class AscoltatoreMenu implements ActionListener {
public void actionPerformed (ActionEvent e) {
if(e.getActionCommand().compareTo("Esci")==0) {
System.exit(0);
}
if(e.getActionCommand().compareTo("Help")==0) {
showHelp();
}
if(e.getActionCommand().compareTo("Somma")==0) {
Somma();
}
if(e.getActionCommand().compareTo("1")==0) {
t1.setText(t1.getText() + Integer.parseInt("1"));
}
if(e.getActionCommand().compareTo("2")==0) {
t1.setText(t1.getText() + Integer.parseInt("2"));
}
if(e.getActionCommand().compareTo("3")==0) {
t1.setText(t1.getText() + Integer.parseInt("3"));
}
if(e.getActionCommand().compareTo("4")==0) {
t1.setText(t1.getText() + Integer.parseInt("4"));
}
if(e.getActionCommand().compareTo("5")==0) {
t1.setText(t1.getText() + Integer.parseInt("5"));
}
if(e.getActionCommand().compareTo("6")==0) {
t1.setText(t1.getText() + Integer.parseInt("6"));
}
if(e.getActionCommand().compareTo("7")==0) {
t1.setText(t1.getText() + Integer.parseInt("7"));
}
if(e.getActionCommand().compareTo("8")==0) {
t1.setText(t1.getText() + Integer.parseInt("8"));
}
if(e.getActionCommand().compareTo("9")==0) {
t1.setText(t1.getText() + Integer.parseInt("9"));
}
if(e.getActionCommand().compareTo("0")==0) {
t1.setText(t1.getText() + Integer.parseInt("0"));
}
if(e.getActionCommand().compareTo("+")==0) {
opdef = 1;
if(t1.getText().compareTo("")==2) {
res = Integer.parseInt(t1.getText());
}
t1.setText("");
}
if(e.getActionCommand().compareTo("*")==0) {
opdef = 2;
if(t1.getText().compareTo("")==2) {
res = Integer.parseInt(t1.getText());
}
t1.setText("");
}
if(e.getActionCommand().compareTo("/")==0) {
opdef = 4;
if(t1.getText().compareTo("")==2) {
res = Integer.parseInt(t1.getText());
}
t1.setText("");
}
if(e.getActionCommand().compareTo("-")==0) {
opdef = 3;
if(t1.getText().compareTo("")==2) {
res = Integer.parseInt(t1.getText());
}
t1.setText("");
}
if(e.getActionCommand().compareTo("=")==0) {
OperationDo();
}
if(e.getActionCommand().compareTo("C")==0) {
t1.setText("");
}
if(e.getActionCommand().compareTo("Math")==0) {
setMath();
}
if(e.getActionCommand().compareTo("Base")==0) {
setBase();
}
}
}
// window listener - apparentemente inutile
class FinestramenuWindowListener implements WindowListener
{
public void windowActivated(WindowEvent e) {
System.out.println("Loop on Window Activated");
}
public void windowClosed(WindowEvent e) {
System.out.println("Loop on Window Closed");
}
public void windowClosing(WindowEvent e)
{
System.out.println("Loop on Window Closing");
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {
System.out.println("Loop on Window Deactivaded");
}
public void windowDeiconified(WindowEvent e) {
System.out.println("Loop on Window Deiconified");
}
public void windowIconified(WindowEvent e) {
System.out.println("Loop on Window Iconified");
}
public void windowOpened(WindowEvent e) {
System.out.println("Loop on Window Opened");
}
}
// Metodo di aiuto
public void showHelp() {
JFrame frame = new JFrame();
JLabel help_1 = new JLabel("Questo è un programma di prova!", JLabel.CENTER);
JLabel help_2 = new JLabel("by MagicStcik(c) Software", JLabel.CENTER);
help_1.setBounds(10,10,300,20);
help_2.setBounds(10,45,300,20);
frame.add(help_1);
frame.add(help_2);
frame.setBounds(300,300,300,100);
frame.setVisible(true);
}
// setup degli elementi
public void setupElementi() {
risultato.setBounds(300,20,300,30);
t1.setBounds(10,10, 100,40);
t1.setBackground(Color.gray);
t2.setBackground(Color.gray);
button.setSize(40,30);
System.out.println(bn.getActionCommand());
}
// sistema di controllo somma
public void Somma() {
risultato.setText("+");
}
public void OperationDo() {
int temp = Integer.parseInt(t1.getText());
System.out.println(res);
if(opdef == 1) {
temp = temp + res;
}
if(opdef == 2) {
temp = temp * res;
}
if(opdef == 4) {
temp = temp / res;
}
if(opdef == 3) {
temp = temp - res;
}
System.out.println(res);
t1.setText(Integer.toString(temp));
}
// cambio di layout
public void setMath() {
bf.setText("Base");
addButtonMath();
setLayout(new GridLayout(8,1));
doLayout();
}
public void setBase() {
bf.setText("Math");
removeButtonMath();
setLayout(new GridLayout(6,1));
doLayout();
}
public void addButtonMath() {
add(blog); add(bln); add(bcos);
add(bsin); add(be); add(bpi);
}
public void removeButtonMath() {
remove(blog); remove(bln); remove(bcos);
remove(bsin); remove(be); remove(bpi);
}
//setup degli ActionListener
void setupEventi() {
// listener del menu
aiuto.addActionListener(new AscoltatoreMenu());
somma.addActionListener(new AscoltatoreMenu());
esci.addActionListener(new AscoltatoreMenu());
b1.addActionListener(new AscoltatoreMenu());
// listener dei bottoni
b2.addActionListener(new AscoltatoreMenu());
b3.addActionListener(new AscoltatoreMenu());
b4.addActionListener(new AscoltatoreMenu());
b5.addActionListener(new AscoltatoreMenu());
b6.addActionListener(new AscoltatoreMenu());
b7.addActionListener(new AscoltatoreMenu());
b8.addActionListener(new AscoltatoreMenu());
b9.addActionListener(new AscoltatoreMenu());
b0.addActionListener(new AscoltatoreMenu());
bp.addActionListener(new AscoltatoreMenu());
bx.addActionListener(new AscoltatoreMenu());
bm.addActionListener(new AscoltatoreMenu());
bd.addActionListener(new AscoltatoreMenu());
bn.addActionListener(new AscoltatoreMenu());
bf.addActionListener(new AscoltatoreMenu());
button.addActionListener(new AscoltatoreMenu());
// listener bottoni math
blog.addActionListener(new AscoltatoreMenu());
bln.addActionListener(new AscoltatoreMenu());
bpi.addActionListener(new AscoltatoreMenu());
be.addActionListener(new AscoltatoreMenu());
bcos.addActionListener(new AscoltatoreMenu());
bsin.addActionListener(new AscoltatoreMenu());
}
}