import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class calculator
{
public static void main(String[] args)
{
calculatorFrame frame=new calculatorFrame();//建立框架
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(300,300);//设置框架大小
}
}class calculatorFrame extends JFrame
{
public calculatorFrame()
{
setTitle("calculator");
// Container contentPane=getContentPane();
calculatorPanel panel=new calculatorPanel();//创建面板
// contentPane.add(panel);
add(panel);
pack();
}
}class calculatorPanel extends JPanel
{
public calculatorPanel()
{
setLayout(new BorderLayout());//创建并设置布局管理器
result=0;
lastCommand="=";
start=true;
display=new JLabel("0");//创建标签
add(display,BorderLayout.NORTH);
ActionListener insert=new InsertAction();
ActionListener command=new CommandAction();
panel=new JPanel();
panel.setLayout(new GridLayout(4,4));
setBounds(10,10,10,10);
setSize(300,250);
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 event)
{
String input=event.getActionCommand();
if(start)
{
display.setText("");
start=false;
}
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String command=evt.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;
else if(lastCommand.equals("=")) result=x;
display.setText(""+result);
}
private JLabel display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}
高手帮忙把主要的代码给注释下,我刚学java,这些看不懂
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class calculator
{
public static void main(String[] args)
{
calculatorFrame frame=new calculatorFrame();//建立框架
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(300,300);//设置框架大小
}
}class calculatorFrame extends JFrame
{
public calculatorFrame()
{
setTitle("calculator");
// Container contentPane=getContentPane();
calculatorPanel panel=new calculatorPanel();//创建面板
// contentPane.add(panel);
add(panel);
pack();
}
}class calculatorPanel extends JPanel
{
public calculatorPanel()
{
setLayout(new BorderLayout());//创建并设置布局管理器
result=0;
lastCommand="=";
start=true;
display=new JLabel("0");//创建标签
add(display,BorderLayout.NORTH);
//初始化监听类
ActionListener insert=new InsertAction();
ActionListener command=new CommandAction();
panel=new JPanel();
panel.setLayout(new GridLayout(4,4));
setBounds(10,10,10,10);
setSize(300,250);
//初始化按钮
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 event)
{
String input=event.getActionCommand();
if(start)
{
display.setText("");
start=false;
}
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String command=evt.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;
//结束运算
else if(lastCommand.equals("=")) result=x;
display.setText(""+result);
}
private JLabel display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}
private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input=event.getActionCommand();
if(start)
{
display.setText("");
start=false;
}
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String command=evt.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.event.*;
import javax.swing.*;public class calculator
{
public static void main(String[] args)
{
calculatorFrame frame=new calculatorFrame();//建立框架
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(300,300);//设置框架大小
}
}class calculatorFrame extends JFrame
{
public calculatorFrame()
{
setTitle("calculator");//设置JFrame的标题
// Container contentPane=getContentPane();
calculatorPanel panel=new calculatorPanel();//创建面板
// contentPane.add(panel);
add(panel);
pack();//将窗口压小
}
}class calculatorPanel extends JPanel
{
public calculatorPanel()
{
setLayout(new BorderLayout());//创建并设置布局管理器(边框布局)
result=0; //设置初始值为零(保存计算结果)
lastCommand="="; //初始保存命令名为”=“
start=true; //设置初始值为TRUE;
display=new JLabel("0");//创建标签
add(display,BorderLayout.NORTH);//将标签布局到北方
ActionListener insert=new InsertAction();//数字键注册insertAction监听
ActionListener command=new CommandAction();//功能键注册CommandAction监听
panel=new JPanel();
panel.setLayout(new GridLayout(4,4));//JPanel设置为网格布局
setBounds(10,10,10,10);//设置按钮大小
setSize(300,250);//设置JPane的大小
addButton("7",insert);//将各个按钮组件加到JPane中,并设置命令名,数字键为insert 功能键为command,实现监听(下面有作者方法addButton())
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); //将JPanel设置为JFrame中中心
}
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 event)
{
String input=event.getActionCommand(); //获得监听命令名
if(start) //初始时start为TRUE,将标签display设置为“”,修改开始状态为FALSE
{
display.setText("");
start=false;
}
display.setText(display.getText()+input); //如果按下了数字键(命令名为insert),就将对应的数字键加到标签display后面
}
}
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String command=evt.getActionCommand(); //获得监听命令名
if(start) //一开始就按下了功能(也就是说没有按下数字键的时候就按下功能键)
{
if(command.equals("-")) //如果按下功能"-",表示取负数,并将"-"显示到标签display上,修改开始start的状态
{
display.setText(command);
start=false;
}
else
lastCommand=command; //修改Jpanel中成员变量lastCommand为除"-"其他处功能键的命令名
}
else //开始有其他数字键按下时
{
calculate(Double.parseDouble(display.getText()));//调用作者自己写的方法calculate,其中的参数将标签display的内容转化成Double
lastCommand=command; //将lastCommand修改为功能键的命令名,并修改开始标签的值为TRUE
start=true;
}
}
}
public void calculate(double x) //实现加减乘除等于的功能,并将结果保存到result中
{
if(lastCommand.equals("+")) result+=x;
else 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); //将标签display设置为result
}
private JLabel display; //用来显示数字键和功能键,结果
private JPanel panel;
private double result;
private String lastCommand; //保存功能键的命令名
private boolean start; //start是标志计算器是否有键按下,没有按下的话为TRUE,有按下的话为FALSE
}
改程序有很多错误,比如直接输入点号 不能出现0.
功能键能够连续输入 +++++++我也是初学者 有什么注释错误 不要见怪 如果觉得还过的去,帮帮我加加分!