java swing计算器两位数

时间:2014-06-06 14:30:30

标签: java swing

我不能输入两位数作为计算器。我也无法让明确的C运算符工作。我的点号似乎也没有用。下面的代码使用java swing创建一个计算器,并对单个数字进行加法,乘法,减法和除法。

//First the necessary packages are imported

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


/**@return a BODMAS calculator using Javax Swing and awt
 * *@author Cihan Altunok
 *@version 1
 */

//implementing ActionListener to listen to events. JFrame is also extended to add support to Swing components
public class Calculator extends JFrame implements ActionListener {
    //declaring some variables to be used in our program
    JFrame guiCalculatorFrame;
    JPanel buttonPanel;
    JTextArea numberCalculator;
    int calculatorOpr=0;
    int currentCalculation;
    //EventQueue invokeLater is used to ensure the run method is called in the dispatch thread of the EventQueue 


    //declaring the constructor for the class

    public Calculator()
    {
        //instantiating guiCalculatorFrame
        guiCalculatorFrame=new JFrame(); 
        //the red cross sign drawn to exit the window
        guiCalculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiCalculatorFrame.setTitle("Calculator");
        //setting the size of the frame
        guiCalculatorFrame.setSize(400,400);
        //The setLocationRelativeTo has been set to null to center the window
        guiCalculatorFrame.setLocationRelativeTo(null);
        //JTextField is created to allow a set of characters to be entered
        numberCalculator=new JTextArea();
        //setting the alignment of JTextField along the RIGHT axis
        numberCalculator.setAlignmentX(JTextField.RIGHT);
        //making the textfield not editable
        numberCalculator.setEditable(false);
        //container containing the components in the north region
        guiCalculatorFrame.add(numberCalculator, BorderLayout.NORTH);
        //panel is created and we will add buttons to the panel later in the program
        buttonPanel=new JPanel();
        //setting Layout to GridLayout to lay the components in a rectangular grid
        buttonPanel.setLayout(new GridLayout(5,5));
        //adding the buttons to the frame. Putting the buttons in the center
        guiCalculatorFrame.add(buttonPanel,BorderLayout.CENTER);
        // a following for loop is done to add the numberButtons

        for (int i=0;i<10;i++)
        {
            addNumberButton(buttonPanel,String.valueOf(i)); 

        }

        //next the five mathematical operators are added

        addActionButton(buttonPanel,1,"+");
        addActionButton(buttonPanel,2,"-");
        addActionButton(buttonPanel,3,"*");
        addActionButton(buttonPanel,4,"/");
        addActionButton(buttonPanel,5,"^2");
        addActionButton(buttonPanel,6,"C");
        addActionButton(buttonPanel,7,"^");
        addActionButton(buttonPanel,8,".");
        //equalSign Button is created
        JButton equalsSignButton=new JButton("=");
        //the action command for the equal sign button is set
        equalsSignButton.setActionCommand("=");
        equalsSignButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)

            //checking if the numberCalculator field is a valid mathematical operator 

            {
                if (!numberCalculator.getText().isEmpty())
                {

                    //turning text into integer
                    int number=Integer.parseInt(numberCalculator.getText());
                    // doing a series of if statements for the list of operations
                    if (calculatorOpr==1)
                    {
                        int calculate=currentCalculation+number;
                        numberCalculator.setText(Integer.toString(calculate));
                    }
                    else if (calculatorOpr==2)
                    {
                        int calculate=currentCalculation-number;
                        numberCalculator.setText(Integer.toString(calculate));
                    }
                    else if (calculatorOpr==3)
                    {
                        int calculate=currentCalculation*number;
                        numberCalculator.setText(Integer.toString(calculate));
                    }
                    else if (calculatorOpr==4)
                    {
                        int calculate=currentCalculation/number;
                        numberCalculator.setText(Integer.toString(calculate));
                    }
                    else if (calculatorOpr==5)
                    {
                        int calculate=currentCalculation*currentCalculation;
                        numberCalculator.setText(Integer.toString(calculate));
                    }
                    else if (calculatorOpr==6)
                    {

                        numberCalculator.setText("");

                    }
                    else if (calculatorOpr==7)
                    {
                        int calculate=(int) Math.sqrt(Integer.parseInt(numberCalculator.getText()));
                        numberCalculator.setText(Integer.toString(calculate));


                    }
                    else if (calculatorOpr==8)
                    {
                        numberCalculator.append(".");
                    }
                }

            }


        });
        //adding equals sign to the panel
        buttonPanel.add(equalsSignButton);
        //setting the visibility to True so the frame can be seen
        guiCalculatorFrame.setVisible(true);

    }
    //passing two paremeters to the addNumberButton method
    private void addNumberButton(Container contain, String name) {
        JButton buttonOne=new JButton(name);
        //setting the action command for the button created above
        buttonOne.setActionCommand(name);
        buttonOne.addActionListener(this);
        //adding buttonOne to the container
        contain.add(buttonOne);

    }
    //passing three parameters to the addActionButton method
    private void addActionButton(Container contain, int i, String text) {
        JButton buttonOne=new JButton(text);
        //setting the action command for the button created above
        buttonOne.setActionCommand(text);
        //creating a new class
        Operators addAction=new Operators(i);
        buttonOne.addActionListener(addAction);
        //adding buttonOne to the container

        contain.add(buttonOne);


    }

    public void actionPerformed(ActionEvent event) {
        //returning the command string associated with this string
        String i=event.getActionCommand();
        //setting the Text to the specified String
        numberCalculator.setText(i);

    }

    //creating an inner class and implementing ActionListener
    private class Operators implements ActionListener
    {

        private int operators;

        //creating a constructor and passing a parameter
        public Operators(int operation)
        {
            operators=operation;
        }

        public void actionPerformed(ActionEvent event) 
        {
            currentCalculation=Integer.parseInt(numberCalculator.getText());
            calculatorOpr=operators;
        }


    }
}*

2 个答案:

答案 0 :(得分:1)

问题是你正在覆盖文本字段。并且C按钮的动作侦听器是错误的。这将解决您的基本问题,但仍有一些工作要做。例如,您目前没有处理.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Calculator extends JFrame implements ActionListener {
    // declaring some variables to be used in our program
    JFrame guiCalculatorFrame;
    JPanel buttonPanel;
    JTextArea numberCalculator;
    int calculatorOpr = 0;
    int currentCalculation;
    boolean isOperatorActive = false;

    // EventQueue invokeLater is used to ensure the run method is called in the
    // dispatch thread of the EventQueue

    // declaring the constructor for the class

    public Calculator() {
        // instantiating guiCalculatorFrame
        guiCalculatorFrame = new JFrame();
        // the red cross sign drawn to exit the window
        guiCalculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiCalculatorFrame.setTitle("Calculator");
        // setting the size of the frame
        guiCalculatorFrame.setSize(400, 400);
        // The setLocationRelativeTo has been set to null to center the window
        guiCalculatorFrame.setLocationRelativeTo(null);
        // JTextField is created to allow a set of characters to be entered
        numberCalculator = new JTextArea();
        // setting the alignment of JTextField along the RIGHT axis
        numberCalculator.setAlignmentX(JTextField.RIGHT);
        // making the textfield not editable
        numberCalculator.setEditable(false);
        // container containing the components in the north region
        guiCalculatorFrame.add(numberCalculator, BorderLayout.NORTH);
        // panel is created and we will add buttons to the panel later in the
        // program
        buttonPanel = new JPanel();
        // setting Layout to GridLayout to lay the components in a rectangular
        // grid
        buttonPanel.setLayout(new GridLayout(5, 5));
        // adding the buttons to the frame. Putting the buttons in the center
        guiCalculatorFrame.add(buttonPanel, BorderLayout.CENTER);
        // a following for loop is done to add the numberButtons

        for (int i = 0; i < 10; i++) {
            addNumberButton(buttonPanel, String.valueOf(i));
        }

        // next the five mathematical operators are added

        addActionButton(buttonPanel, 1, "+");
        addActionButton(buttonPanel, 2, "-");
        addActionButton(buttonPanel, 3, "*");
        addActionButton(buttonPanel, 4, "/");
        addActionButton(buttonPanel, 5, "^2");
        addActionButton(buttonPanel, 6, "C");
        addActionButton(buttonPanel, 7, "^");
        addActionButton(buttonPanel, 8, ".");
        // equalSign Button is created
        JButton equalsSignButton = new JButton("=");
        // the action command for the equal sign button is set
        equalsSignButton.setActionCommand("=");
        equalsSignButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {

                // checking if the numberCalculator field is a valid mathematical
                // operator
                isOperatorActive = true;
                if (!numberCalculator.getText().isEmpty()) {
                    // turning text into integer
                    int number = Integer.parseInt(numberCalculator.getText());
                    // doing a series of if statements for the list of
                    // operations
                    int calculate = 0;
                    switch (calculatorOpr) {
                        case 1:
                            calculate = currentCalculation + number;
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 2:
                            calculate = currentCalculation - number;
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 3:
                            calculate = currentCalculation * number;
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 4:
                            calculate = currentCalculation / number;
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 5:
                            calculate = currentCalculation * currentCalculation;
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 7:
                            calculate = (int) Math.sqrt(Integer
                                    .parseInt(numberCalculator.getText()));
                            numberCalculator.setText(Integer.toString(calculate));
                            break;

                        case 8:
                            numberCalculator.append(".");
                            break;

                        default:
                            break;
                    }
                }

            }

        });
        // adding equals sign to the panel
        buttonPanel.add(equalsSignButton);
        // setting the visibility to True so the frame can be seen
        guiCalculatorFrame.setVisible(true);

    }

    // passing two parameters to the addNumberButton method
    private void addNumberButton(Container contain, String name) {
        JButton buttonOne = new JButton(name);
        // setting the action command for the button created above
        buttonOne.setActionCommand(name);
        buttonOne.addActionListener(this);
        // adding buttonOne to the container
        contain.add(buttonOne);
    }

    // passing three parameters to the addActionButton method
    private void addActionButton(Container contain, int i, String text) {
        JButton buttonOne = new JButton(text);
        // setting the action command for the button created above
        buttonOne.setActionCommand(text);
        // creating a new class
        Operators addAction = new Operators(i);
        buttonOne.addActionListener(addAction);
        // adding buttonOne to the container

        contain.add(buttonOne);

    }

    public void actionPerformed(ActionEvent event) {
        // returning the command string associated with this string
        String i = event.getActionCommand();
        // setting the Text to the specified String
        if(isOperatorActive){
            numberCalculator.setText(i);
            isOperatorActive = false;
        } else {
            numberCalculator.setText(numberCalculator.getText() + i);
        }
    }

    // creating an inner class and implementing ActionListener
    private class Operators implements ActionListener {

        private int operators;

        // creating a constructor and passing a parameter
        public Operators(int operation) {
            operators = operation;
        }

        public void actionPerformed(ActionEvent event) {
            isOperatorActive = true;
            switch (operators) {
                case 6:
                    numberCalculator.setText("");
                    currentCalculation = 0;
                    calculatorOpr = 0;
                    break;
                case 8:
                    isOperatorActive = false;
                default:
                    currentCalculation = Integer.parseInt(numberCalculator.getText());
                    calculatorOpr = operators;
                    break;
            }
        }

    }
}

答案 1 :(得分:0)

    import javax.swing.*;
    import java.awt.*;
/*
@ Author 12CSE54
@ Date 29.10.14
*/
    public class calculator1 extends JFrame
     {
        public calculator1() {
            initComponents();
        }

    int a,b,c;
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    a=Integer.parseInt(jTextField1.getText());
    b=Integer.parseInt(jTextField2.getText());
    c=a+b;
    jTextField3.setText(String.valueOf(c));
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    a=Integer.parseInt(jTextField1.getText());
    b=Integer.parseInt(jTextField2.getText());
    c=a-b;
    jTextField3.setText(String.valueOf(c));
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    a=Integer.parseInt(jTextField1.getText());
    b=Integer.parseInt(jTextField2.getText());
    c=a*b;
    jTextField3.setText(String.valueOf(c));
    }                                        

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    a=Integer.parseInt(jTextField1.getText());
    b=Integer.parseInt(jTextField2.getText());
    c=a/b;
    jTextField3.setText(String.valueOf(c));

    }                                        

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");
    }                                        

    public static void main(String ar[])
    {
            java.awt.EventQueue.invokeLater(new Runnable() {

                public void run() {
                    new calculator1().setVisible(true);
                }
            });
        }