我想制作一个小型计算器项目,以便用Java Swing API测试我的新GUI知识。我创建了GUI,但缺少一个关键部分:数学!我的问题是,如何为每个按钮添加功能?简单来说:当用户点击按钮时,如何让按钮在文本框(2 + 2)中添加内容,然后系统实际将数字添加到一起并显示给用户?
以下是代码:
package calculatorPack;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.UIManager;
public class basicCalculatorDesign {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
}
basicCalculatorDesign calc = new basicCalculatorDesign();
calc.start();
}
JTextArea input = new JTextArea();
String[] operators;
int[] numbers;
public void start() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
JButton zero = new JButton("0");
JButton plus = new JButton("+");
JButton minus = new JButton("-");
JButton divide = new JButton("/");
JButton multiply = new JButton("*");
JButton sqrt = new JButton("SqRt");
JButton percentage = new JButton("%");
JButton equals = new JButton("=");
// work on this
JLabel label = new JLabel("Basic Calculator");
frame.getContentPane().add(BorderLayout.NORTH, label);
frame.getContentPane().add(BorderLayout.SOUTH, input);
panel.setBackground(Color.BLUE);
panel.setLayout(new GridBagLayout());
JPanel panel2 = new JPanel();
panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
panel2.setBackground(Color.RED);
frame.getContentPane().add(BorderLayout.EAST, panel2);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(210, 260);
GridBagConstraints right = new GridBagConstraints();
right.anchor = GridBagConstraints.WEST;
GridBagConstraints left = new GridBagConstraints();
left.anchor = GridBagConstraints.EAST;
GridBagConstraints middle = new GridBagConstraints();
middle.anchor = GridBagConstraints.CENTER;
right.gridwidth = GridBagConstraints.REMAINDER;
right.fill = GridBagConstraints.HORIZONTAL;
// add buttons
panel.add(one, left);
panel.add(two, middle);
panel.add(three, right);
panel.add(four, left);
panel.add(five, middle);
panel.add(six, right);
panel.add(seven, left);
panel.add(eight, middle);
panel.add(nine, right);
panel.add(zero, right);
panel2.add(equals);
panel2.add(plus);
panel2.add(minus);
panel2.add(divide);
panel2.add(multiply);
panel2.add(sqrt);
panel2.add(percentage);
//integrate buttons
one.addActionListener(new ButtonListener());
two.addActionListener(new ButtonListener());
three.addActionListener(new ButtonListener());
four.addActionListener(new ButtonListener());
five.addActionListener(new ButtonListener());
six.addActionListener(new ButtonListener());
seven.addActionListener(new ButtonListener());
eight.addActionListener(new ButtonListener());
nine.addActionListener(new ButtonListener());
zero.addActionListener(new ButtonListener());
equals.addActionListener(new OperatorListener());
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();
input.replaceSelection(source.getActionCommand());
}
}
class OperatorListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton source2 = (JButton)e.getSource();
input.replaceSelection(source2.getActionCommand());
}
}
// I need THIS to do math.
class EqualsListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
}
答案 0 :(得分:2)
看起来您想要评估算术表达式。一些选择:
撰写recursive descent parser,插图为here。
使用DocumentListener
评估用户在文本区域中键入的表达式,讨论here。
答案 1 :(得分:0)
他们理解你的代码,你正在创建一个带有字符串的文本区域,看起来像公式(“1 + 1”)。我不确定该代码是否有效,因为我看到它的方式,你只是将一个数字替换为另一个数字。这只是文本,所以无所谓。
如果您想进行数学运算,则必须更改代码以从文本中生成实数。由于您只转换一个数字,这很容易。
您必须知道哪个是第一个号码,哪个是第二个号码。然后,当用户按下“=”按钮时,您可以执行它。
所以它是这样的:
setVal1(-1);
setVal2(-1);
setOperation(null);
你的按钮监听器中的做了这样的事情:
int val = Integer.parseInt(buttontext);
if(getVal1() == -1)
setVal1val);
else
setVal2(val);
运算符监听器中的执行以下操作:
setOperation(OperationFromButton);
在你平等的听众中做这样的事情:
if(getVal1() == -1 || getVal2() == -1 || getOperation() == null)
return error or nothing;
if(operation == "+")
result = getVal1()+getVal2();
else if(operation == "-")
result = getVal1()-getVal2();
...