private class CommandAction implements ActionListener{ public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(start){
if(command.equals("-")){
display.setText(command);
start = false;
}else
lastCommand = command;
}else{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
String command = e.getActionCommand();
if(start){
if(command.equals("-")){
display.setText(command);
start = false;
}else
lastCommand = command;
}else{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
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;
public class Calculator {
public static void main(String[] args) {
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(true);
}}class CalculatorFrame extends JFrame{
public CalculatorFrame(){
// this.setSize(arg0);
setTitle("超哥计算器");
CalculatorPanel panel = new CalculatorPanel();
add(panel);
pack();
}
}class CalculatorPanel extends JPanel{
public CalculatorPanel(){
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;
display = new JButton("0");
display.setEnabled(false);
add(display,BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
panel = new JPanel();
panel.setLayout(new GridLayout(4,4));
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/", command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*", command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("+", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("-", command);
add(panel,BorderLayout.CENTER);
}
private void addButton(String label,ActionListener listener){
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener{ public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand();
if(start){
display.setText("");
start = false;
}
display.setText(display.getText() + input);
}
}
private class CommandAction implements ActionListener{ public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(start){
if(command.equals("-")){
display.setText(command);
start = false;
}else
lastCommand = command;
}else{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
public void calculate(double x){
if(lastCommand.equals("+")) result += x;
else if(lastCommand.equals("-")) result -= x;
else if(lastCommand.equals("*")) result *= x;
else if(lastCommand.equals("/")) result /= x;
display.setText(" " + result);
}
private JButton display;
private JPanel panel;
private boolean start;
private double result;
private String lastCommand;
}
InsertAction==>对应数字
我下面给红色表的是两个监听器,与问题 有一些无用代码,我给你个程序思路。
strart=true or false 有意思么 点击按钮了 ,就会触发事件了
还有以下这块代码 有意思么 ,点按钮,就触发事件,把符号赋值给字符串不就完了么。用判断么.
我有说的不对可以指出来.
共同学习,进步么
if(start){//如果没有start是true的话进入 条件循环 这里判断的是否点击是符号键
if(command.equals("-")){//判断你是否点的是‘-’号
System.out.println("进入了减号");
display.setText(command);
start = false;
}else//如果不是'-'号
lastCommand = command;//把该符号赋值 给lastCommand
}else{//如果不是点击是符号键 的话进入
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
源代码:
package test;
import java.awt.BorderLayout;
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;
public class test {
public static void main(String[] args) {
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(true); }}class CalculatorFrame extends JFrame{
public CalculatorFrame(){
// this.setSize(arg0);
setTitle("超哥计算器");
CalculatorPanel panel = new CalculatorPanel();
add(panel);//把组件添加容器上
pack();
}
}class CalculatorPanel extends JPanel{
private JButton display;
private JPanel panel;
private boolean start;
private double result;
private String lastCommand;
public CalculatorPanel(){
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;//strart初始化
display = new JButton("0");
display.setEnabled(false);
add(display,BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
panel = new JPanel();
panel.setLayout(new GridLayout(4,4));
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/", command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*", command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("+", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("-", command);
add(panel,BorderLayout.CENTER);
}
private void addButton(String label,ActionListener listener){
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener{//数字键 和点键 点击事件 public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand();
if(start){//如果没有start是true的话进入 条件循环 这里判断的是否是按了数字键和点键
display.setText("");//你这个按钮的值清空
start = false;
}
display.setText(display.getText() + input);
}
}
private class CommandAction implements ActionListener{//符号的事件 public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(start){//如果没有start是true的话进入 条件循环 这里判断的是否点击是符号键
if(command.equals("-")){//判断你是否点的是‘-’号
System.out.println("进入了减号");
display.setText(command);
start = false;
}else//如果不是'-'号
lastCommand = command;//把该符号赋值 给lastCommand
}else{//如果不是点击是符号键 的话进入
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
public void calculate(double x){//判断运算符号
if(lastCommand.equals("+")) result += x;
else if(lastCommand.equals("-")) result -= x;
else if(lastCommand.equals("*")) result *= x;
else if(lastCommand.equals("/")) result /= x;
display.setText(" " + result);
}}
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at CalculatorPanel$CommandAction.actionPerformed(Calculator.java:108)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "-"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at CalculatorPanel$CommandAction.actionPerformed(Calculator.java:108)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
”
直接性无言