Java GUI计算器按钮问题
当我按下按钮时,我得到屏幕文本。然而, 当我按下“=”按钮时,它不会填充任何内容。我尝试过将按钮的屏幕文本设置为我的获取值方法,但仍然没有。我还尝试将其设置为acc.getValue() 我需要在蓄能器中为按钮做些什么吗 有什么建议我应该试试吗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
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()
方法后