Questo é il codice, realizzato attraverso il plugin di Window Builder in Eclipse. Comunque ho già implementato qualche interfaccia grafica, dato che studio Java da un anno circa. Inoltre non volevo il codice completo, ma giusto qualche idea di implementazione. Ho letto in giro su internet che é utile usare lo stack, attraverso la PostFix Notation, solo che non ho la minima idea di come iniziare.
import java.awt.Component.*;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.Component;
import javax.swing.UIManager;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.SystemColor;
import java.awt.Window.Type;
public class Calcolatrice {
private JFrame frmCalcolatrice;
private JTextField testoDisplay;
double operando1;
double operando2;
double ris;
String operazione;
String risultato;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calcolatrice window = new Calcolatrice();
window.frmCalcolatrice.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calcolatrice() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmCalcolatrice = new JFrame("Calcolatrice");
frmCalcolatrice.getContentPane().setBackground(Color.ORANGE);
frmCalcolatrice.setAlwaysOnTop(true);
frmCalcolatrice.setBackground(Color.WHITE);
frmCalcolatrice.getContentPane().setFont(new Font("Lao MN", Font.BOLD, 13));
frmCalcolatrice.setBounds(100, 100, 425, 337);
frmCalcolatrice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmCalcolatrice.getContentPane().setLayout(null);
testoDisplay = new JTextField();
testoDisplay.setBackground(Color.WHITE);
testoDisplay.addKeyListener(new KeyAdapter() {
//Suono del pc, se premo i tasti della tastiera
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if(!(Character.isDigit(c) || c == KeyEvent.VK_BACK_SPACE || c == KeyEvent.VK_DELETE))
testoDisplay.getToolkit().beep();
e.consume();
}
});
testoDisplay.setHorizontalAlignment(SwingConstants.RIGHT);
testoDisplay.setBounds(5, 6, 416, 50);
testoDisplay.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(testoDisplay);
testoDisplay.setColumns(10);
//MOLTIPLICAZIONE//
JButton btnMoltiplicazione = new JButton("×");
btnMoltiplicazione.setBounds(314, 109, 50, 50);
btnMoltiplicazione.setBackground(Color.WHITE);
btnMoltiplicazione.setFont(new Font("Lao MN", Font.BOLD, 20));
btnMoltiplicazione.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
operando1 = Double.parseDouble(testoDisplay.getText());
testoDisplay.setText("");
operazione = btnMoltiplicazione.getText();
}
});
frmCalcolatrice.getContentPane().add(btnMoltiplicazione);
//DIVISIONE//
JButton btnDivisione = new JButton("÷");
btnDivisione.setBounds(314, 60, 50, 50);
btnDivisione.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
operando1 = Double.parseDouble(testoDisplay.getText());
testoDisplay.setText("");
operazione = btnDivisione.getText();
}
});
btnDivisione.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnDivisione);
//SOTTRAZIONE//
JButton btnSottrazione = new JButton("-");
btnSottrazione.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
operando1 = Double.parseDouble(testoDisplay.getText());
testoDisplay.setText("");
operazione = btnSottrazione.getText();
}
});
btnSottrazione.setBounds(314, 158, 50, 50);
//btnSottrazione.setBackground(Color.red);
btnSottrazione.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnSottrazione);
//ADDIZIONE//
JButton btnAddizione = new JButton("+");
btnAddizione.setBounds(314, 207, 50, 50);
btnAddizione.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
operando1 = Double.parseDouble(testoDisplay.getText());
testoDisplay.setText("");
operazione = "+";
}
});
btnAddizione.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnAddizione);
//RISULTATO//
JButton btnUguale = new JButton("=");
btnUguale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
operando2 = Double.parseDouble(testoDisplay.getText());
if(operazione == "+")
{
ris = operando1 + operando2;
risultato = String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(operazione == "-")
{
ris = operando1 - operando2;
risultato =String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(operazione == "×")
{
ris = operando1 * operando2;
risultato = String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(operazione == "÷")
{
ris = operando1/operando2;
risultato = String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(operazione == "=")
{
ris = operando1;
risultato = String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(operazione == "x^n")
{
ris = Math.pow(operando1, operando2);
risultato = String.format("%.2f", ris);
testoDisplay.setText(risultato);
}
if(risultato.contains(",")){
String Nris = testoDisplay.getText().replace(",", ".");
testoDisplay.setText(Nris);
}
approssimazione();
}
});
btnUguale.setBounds(314, 256, 50, 50);
btnUguale.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnUguale);
//PERCENTUALE//
JButton btnPercentuale = new JButton("%");
btnPercentuale.setBackground(Color.WHITE);
btnPercentuale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = op/100;
testoDisplay.setText(String.valueOf(op));
}
});
btnPercentuale.setBackground(Color.ORANGE);
btnPercentuale.setForeground(Color.BLACK);
btnPercentuale.setBounds(362, 60, 59, 50);
btnPercentuale.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnPercentuale);
//NUMERO 9//
JButton btn9 = new JButton("9");
btn9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText()+btn9.getText();
testoDisplay.setText(numero);
}
});
btn9.setBounds(266, 109, 50, 50);
btn9.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn9);
//NUMERO 6//
JButton btn6 = new JButton("6");
btn6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn6.getText();
testoDisplay.setText(numero);
}
});
btn6.setBounds(266, 158, 50, 50);
btn6.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn6);
//NUMERO 3//
JButton btn3 = new JButton("3");
btn3.setBounds(266, 207, 50, 50);
btn3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn3.getText();
testoDisplay.setText(numero);
}
});
btn3.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn3);
//VIRGOLA//
JButton btnVirgola = new JButton(".");
btnVirgola.setBounds(266, 256, 50, 50);
btnVirgola.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(!testoDisplay.getText().contains("."))
{
testoDisplay.setText(testoDisplay.getText()+".");
}
}
});
btnVirgola.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnVirgola);
//PLUS MINUS//
JButton btnPlusMinus = new JButton("+/-");
btnPlusMinus.setBounds(266, 60, 50, 50);
btnPlusMinus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = op*(-1);
testoDisplay.setText(String.valueOf(op));
}
});
btnPlusMinus.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnPlusMinus);
//NUMERO 8//
JButton btn8 = new JButton("8");
btn8.setBounds(217, 109, 50, 50);
btn8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText()+btn8.getText();
testoDisplay.setText(numero);
}
});
btn8.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn8);
//NUMERO 5//
JButton btn5 = new JButton("5");
btn5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn5.getText();
testoDisplay.setText(numero);
}
});
btn5.setBounds(217, 158, 50, 50);
btn5.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn5);
//NUMERO 2//
JButton btn2 = new JButton("2");
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn2.getText();
testoDisplay.setText(numero);
}
});
btn2.setBounds(217, 207, 50, 50);
btn2.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn2);
//NUMERO 0//
JButton btn0 = new JButton("0");
btn0.setBackground(Color.WHITE);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn0.getText();
testoDisplay.setText(numero);
}
});
btn0.setBounds(165, 256, 102, 50);
btn0.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn0);
//BOTTONE CANCELLA//
JButton btnClear = new JButton("C");
btnClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
testoDisplay.setText(null);
}
});
btnClear.setBounds(217, 60, 50, 50);
btnClear.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnClear);
//BOTTONE 7//
JButton btn7 = new JButton("7");
btn7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn7.getText();
testoDisplay.setText(numero);
}
});
btn7.setBounds(165, 109, 50, 50);
btn7.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn7);
//BOTTONE 4//
JButton btn4 = new JButton("4");
btn4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn4.getText();
testoDisplay.setText(numero);
}
});
btn4.setBounds(165, 158, 50, 50);
btn4.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn4);
//BOTTONE 1//
JButton btn1 = new JButton("1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + btn1.getText();
testoDisplay.setText(numero);
}
});
btn1.setBounds(165, 207, 50, 50);
btn1.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btn1);
//BOTTONE ESADECIMALE//
JButton btnHex = new JButton("hex"); //Esadecimali
btnHex.setBounds(115, 60, 50, 50);
btnHex.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int a = Integer.parseInt(testoDisplay.getText());
testoDisplay.setText(Integer.toString(a,16));
}
});
btnHex.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnHex);
//BOTTONE BINARIO//
JButton btnBin = new JButton("bin"); //Binari
btnBin.setBounds(66, 60, 50, 50);
btnBin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int a = Integer.parseInt(testoDisplay.getText());
testoDisplay.setText(Integer.toString(a,2));
}
});
btnBin.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnBin);
//BOTTONE RADICE QUADRATA//
JButton btnRadQuad = new JButton("v");
btnRadQuad.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.sqrt(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnRadQuad.setBounds(115, 109, 50, 50);
btnRadQuad.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnRadQuad);
//BOTTONE ESPONENZIALE//
JButton btnEsponenziale = new JButton("e");
btnEsponenziale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText()+Math.E;
testoDisplay.setText(String.valueOf(numero));
}
});
btnEsponenziale.setBounds(115, 158, 50, 50);
btnEsponenziale.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnEsponenziale);
//BOTTONE LOG//
JButton btnLog10 = new JButton("log");
btnLog10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.log10(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnLog10.setBounds(115, 207, 50, 50);
btnLog10.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnLog10);
//BOTTONE SENO//
JButton btnSeno = new JButton("sinx");
btnSeno.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.sin(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnSeno.setBounds(362, 109, 59, 50);
btnSeno.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnSeno);
//BOTTONE RADICE CUBICA//
JButton btnRadCub = new JButton("?");
btnRadCub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.pow(op,1.0/3.0);
testoDisplay.setText(String.valueOf(op));
}
});
btnRadCub.setBounds(66, 109, 50, 50);
btnRadCub.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnRadCub);
//BOTTONE PI GRECO//
JButton btnPiGreco = new JButton("p");
btnPiGreco.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numero = testoDisplay.getText() + Math.PI;
testoDisplay.setText(String.valueOf(numero));
}
});
btnPiGreco.setBounds(66, 158, 50, 50);
btnPiGreco.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnPiGreco);
//BOTTONE LN//
JButton btnLn = new JButton("ln");
btnLn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.log(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnLn.setBounds(66, 207, 50, 50);
btnLn.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnLn);
//BOTTONE COSENO//
JButton btnCosx = new JButton("cosx");
btnCosx.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.cos(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnCosx.setBounds(362, 158, 59, 50);
btnCosx.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnCosx);
//BOTTONE CANCELLA//
JButton btnCancella = new JButton("?");
btnCancella.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String cancella = null;
if(testoDisplay.getText().length() > 0)
{
StringBuilder b = new StringBuilder(testoDisplay.getText());
b.deleteCharAt(testoDisplay.getText().length()-1);
cancella = b.toString();
testoDisplay.setText(cancella);
}
}
});
btnCancella.setBounds(165, 60, 50, 50);
btnCancella.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnCancella);
JButton btnTanx = new JButton("tanx");
btnTanx.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.tan(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnTanx.setBounds(362, 207, 59, 50);
btnTanx.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnTanx);
//BOTTONE POTENZA N-ESIMA//
JButton btnPotenzaX = new JButton("x^n");
btnPotenzaX.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
operando1 = Double.parseDouble(testoDisplay.getText());
testoDisplay.setText("");
operazione = btnPotenzaX.getText();
}
});
btnPotenzaX.setBounds(66, 256, 50, 50);
btnPotenzaX.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnPotenzaX);
//BOTTONE POTENZA 2//
JButton btnPotenza2 = new JButton("x^2");
btnPotenza2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = op*op;
testoDisplay.setText(String.valueOf(op));
}
});
btnPotenza2.setBounds(115, 256, 50, 50);
btnPotenza2.setFont(new Font("Lao MN", Font.BOLD, 20));
frmCalcolatrice.getContentPane().add(btnPotenza2);
//BOTTONE FATTORIALE//
JButton btnFattoriale = new JButton("X!");
btnFattoriale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int op = Integer.parseInt(String.valueOf(testoDisplay.getText()));
op = fattoriale(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnFattoriale.setBounds(362, 256, 59, 50);
btnFattoriale.setFont(new Font("Lao MN", Font.BOLD, 18));
frmCalcolatrice.getContentPane().add(btnFattoriale);
JButton button = new JButton("tanh");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.tanh(op);
testoDisplay.setText(String.valueOf(op));
}
});
button.setForeground(Color.BLACK);
button.setFont(new Font("Lao MN", Font.BOLD, 20));
button.setBackground(Color.WHITE);
button.setBounds(6, 60, 59, 50);
frmCalcolatrice.getContentPane().add(button);
//COSECANTE//
JButton btnArcCos = new JButton("acos");
btnArcCos.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.acos(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnArcCos.setForeground(Color.BLACK);
btnArcCos.setFont(new Font("Lao MN", Font.BOLD, 20));
btnArcCos.setBackground(Color.WHITE);
btnArcCos.setBounds(6, 158, 59, 50);
frmCalcolatrice.getContentPane().add(btnArcCos);
//ARCOSENO//
JButton ArcSen = new JButton("asin");
ArcSen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.asin(op);
testoDisplay.setText(String.valueOf(op));
}
});
ArcSen.setForeground(Color.BLACK);
ArcSen.setFont(new Font("Lao MN", Font.BOLD, 20));
ArcSen.setBackground(Color.WHITE);
ArcSen.setBounds(6, 207, 59, 50);
frmCalcolatrice.getContentPane().add(ArcSen);
//ARCOTANGENTE//
JButton btnArcTan = new JButton("atan");
btnArcTan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.atan(op);
testoDisplay.setText(String.valueOf(op));
}
});
btnArcTan.setForeground(Color.BLACK);
btnArcTan.setFont(new Font("Lao MN", Font.BOLD, 20));
btnArcTan.setBackground(Color.WHITE);
btnArcTan.setBounds(6, 256, 59, 50);
frmCalcolatrice.getContentPane().add(btnArcTan);
JButton button_4 = new JButton("sinh");
button_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double op = Double.parseDouble(String.valueOf(testoDisplay.getText()));
op = Math.sinh(op);
testoDisplay.setText(String.valueOf(op));
}
});
button_4.setForeground(Color.BLACK);
button_4.setFont(new Font("Lao MN", Font.BOLD, 20));
button_4.setBackground(Color.WHITE);
button_4.setBounds(5, 109, 59, 50);
frmCalcolatrice.getContentPane().add(button_4);
}
//METODI DI SUPPORTO//
public static int fattoriale(int x) {
int f=1;
for(int i=1; i<=x; i++) {
f=f*i;
}
return f;
}
private void approssimazione()
{
if(testoDisplay.getText().endsWith(".00"))
{
testoDisplay.setText(testoDisplay.getText().replace(".00", ""));
}
else if(testoDisplay.getText().endsWith(".0"))
{
testoDisplay.setText(testoDisplay.getText().replace(".0", ""));
}
}
}//class