Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI计算器按钮问题_Java_User Interface_Calculator - Fatal编程技术网

Java GUI计算器按钮问题

Java GUI计算器按钮问题,java,user-interface,calculator,Java,User Interface,Calculator,当我按下按钮时,我得到屏幕文本。然而, 当我按下“=”按钮时,它不会填充任何内容。我尝试过将按钮的屏幕文本设置为我的获取值方法,但仍然没有。我还尝试将其设置为acc.getValue() 我需要在蓄能器中为按钮做些什么吗 有什么建议我应该试试吗 import acm.program.*; import javax.swing.*; import java.awt.*; // for graphics import java.awt.event.ActionEvent; import ja

当我按下按钮时,我得到屏幕文本。然而, 当我按下“=”按钮时,它不会填充任何内容。我尝试过将按钮的屏幕文本设置为我的获取值方法,但仍然没有。我还尝试将其设置为acc.getValue() 我需要在蓄能器中为按钮做些什么吗

有什么建议我应该试试吗

import acm.program.*;
import javax.swing.*;
import java.awt.*;    // for graphics 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import acm.gui.*;
public class Calculator extends DialogProgram implements ActionListener{ 


    JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bm,bd,ba,bs,bdec,bc,bequ;
    DoubleField screen;
    JPanel P,P1,P2;
    Accumulator acc = new Accumulator();


    public void init() {


    //create a panel 


    JPanel P= new JPanel();     // main panel 

    JPanel P1= new JPanel();    // panel for buttons 

    JPanel P2= new JPanel();    // panel for screen

    // adding panel to dialog box

    add(P);        // main panel 
    P.add(P2);     // adding screen
    P.add(P1);     // adding panel of buttons 

    // set panel color 
    P.setBackground(Color.yellow);                 


    // grid layout for buttons 

    P1.setLayout(new GridLayout(5,4,4,4));           // layout for button panel 
    P.setLayout(new GridLayout(2,1));                // layout for main panel 

    // create screen 
    screen = new DoubleField();                      // creating screen 
    screen.setPreferredSize(new Dimension(200,40));  // setting screen size 
    screen.setEditable(false);                       // screen can not be edited 

    // integer buttons 
    b0 = new JButton("0");
    b1 = new JButton("1");
    b2 = new JButton("2");
    b3 = new JButton("3");
    b4 = new JButton("4");
    b5 = new JButton("5");
    b6 = new JButton("6");
    b7 = new JButton("7");
    b8 = new JButton("8");
    b9 = new JButton("9");

    // operator buttons 
    bm = new JButton("*");
    bd= new  JButton("/");
    ba = new JButton("+"); 
    bs = new JButton("-");

    // decimal button 
    bdec = new JButton(".");

    // clear button
    bc = new JButton("Clr");

    // equal button
    bequ = new JButton("=");

    // adding buttons to panel 
    P2.add(screen);
    P1.add(b7);
    P1.add(b8);
    P1.add(b9);
    P1.add(bm);
    P1.add(b4);
    P1.add(b5);
    P1.add(b6);
    P1.add(bd);
    P1.add(b1);
    P1.add(b2);
    P1.add(b3);
    P1.add(ba);
    P1.add(bc);
    P1.add(b0);
    P1.add(bdec);
    P1.add(bs);
    P1.add(bequ);

    // adding action listeners 
     bm.addActionListener(this); 
     bd.addActionListener(this); 
     bs.addActionListener(this); 
     ba.addActionListener(this);
     b9.addActionListener(this); 
     b8.addActionListener(this); 
     b7.addActionListener(this); 
     b6.addActionListener(this); 
     b5.addActionListener(this); 
     b4.addActionListener(this); 
     b3.addActionListener(this); 
     b2.addActionListener(this); 
     b1.addActionListener(this); 
     b0.addActionListener(this); 
     bdec.addActionListener(this); 
     bc.addActionListener(this); 
     bequ.addActionListener(this);



     addActionListeners();


    } // close 


    public void actionPerformed (ActionEvent e) {
         String clicked =e.getActionCommand();
         if (clicked.equals("1")) {
             screen.setText(screen.getText()+clicked);
         }  
         if (clicked.equals("2")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("3")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("4")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("5")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("6")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("7")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("8")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("9")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("0")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("*")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("/")) {
             screen.setText(screen.getText()+clicked);
         }     
         if (clicked.equals("+")) {
             screen.setText(screen.getText()+clicked);
         } 
         if (clicked.equals("-")) {
             screen.setText(screen.getText()+clicked);
         } 
         if (clicked.equals(".")) {
             screen.setText(screen.getText()+clicked);
         }
         if (clicked.equals("Clr")) {
             screen.setText("");
         } 
         if (clicked.equals("=")) {
             screen.setText();
         } 
    }/*action Performed*/


    public class Accumulator{
        double valueSoFar;
        String currentOperator;

        Accumulator(){
            valueSoFar=0.0;
            currentOperator="C";
        }
        /*constructor*/

        void calculate(double numberOnDisplay, String nextOperator) {
            if (currentOperator.contentEquals("+")) {
                valueSoFar= valueSoFar + numberOnDisplay;
            }
            if (currentOperator.contentEquals("-")) {
                valueSoFar= valueSoFar - numberOnDisplay;
            }
            if (currentOperator.contentEquals("*")) {
                valueSoFar= valueSoFar * numberOnDisplay;
            }
            if (currentOperator.contentEquals("/")) {
                valueSoFar= valueSoFar / numberOnDisplay;
            }
            currentOperator = nextOperator;

        }/*calculate*/

        double getValue() {
            return valueSoFar;
            }/*getValue*/





    }/*Accumulator*/


} /*Class*/

当等于“=”时,除了
setText(),您永远不会对按钮执行任何操作

if (clicked.equals("=")) {
   screen.setText();
}
应该是

if (clicked.equals("=")) {
   acc.calculate(screen.getValue(), "=");
   screen.setValue(acc.getValue());
}

然后在
calculate
方法中,需要添加运算符“=”并进行计算

当等于“=”时,除了
setText()之外,您从未对按钮执行任何操作

if (clicked.equals("=")) {
   screen.setText();
}
应该是

if (clicked.equals("=")) {
   acc.calculate(screen.getValue(), "=");
   screen.setValue(acc.getValue());
}

然后在
calculate
方法中,需要添加运算符“=”并进行计算

看起来你从来没有真正调用过
计算方法,数字出现在屏幕上的唯一原因似乎是因为你在
actionPerformed
方法中将其添加到屏幕上。此外,你还需要将屏幕文本设置为
acc.getValue()
,就像你之前尝试的那样,虽然它现在应该有一个值,我在哪里调用calculate方法?很遗憾,我没有时间深入研究您的代码,但我想说,当按下“=”键时,您希望调用
calculate
,传递所需的参数。在您可以将屏幕文本设置为
getValue()
方法之后,似乎您从未实际调用
calculate
方法,似乎屏幕上出现数字的唯一原因是因为您正在将其添加到
actionPerformed
方法的屏幕中,您需要将屏幕文本设置为
acc.getValue()
,就像您之前尝试的那样,尽管它现在实际上应该有一个值,我应该在哪里调用计算方法?很遗憾,我没有时间深入研究您的代码,但我想说,当按下“=”键时,您希望调用
calculate
,传递所需的参数。可以将屏幕文本设置为
getValue()
方法后