java 计算器程序_java计算器程序
,gridheight:指定组件显示区的一列中的单元格数
private String lastCommand;//保存+,-,*,/,=命令
private double result;//保存计算结果
private boolean start;//判断是否为数字开始
public jisuanqi() {
super("java编写的计算器"); //标题栏的名字
container=getContentPane(); //初始化一个容器。用来在容器上添加控件
layout=new GridBagLayout(); //建立一个新的管理器
container.setLayout(layout);
constraints=new GridBagConstraints(); //
start=true;
result=0;
lastCommand = "="; //默认执行的操作
displayField=new JTextField(20); //定义计算区域
displayField.setHorizontalAlignment(JTextField.RIGHT);
//定义计算区域的数字靠右显示
displayField.setBackground(Color.lightGray);//定义计算显示区域的背景颜色
displayField.setForeground(Color.white);//定义计算显示区域的前景颜色
constraints.gridx=0;
constraints.gridy=0; //定义计算区域的X,Y轴
constraints.gridwidth=4; //一行单元格数为4个
constraints.gridheight=1; //定义计算区域的宽度和高度
constraints.fill=GridBagConstraints.BOTH; //定义控件填充满剩余空间
constraints.weightx=50;
constraints.weighty=50; //定义计算区域的X,Y轴单位度量值
layout.setConstraints(displayField,constraints);
container.add(displayField); //将计算区域加入到窗口中
ActionListener insert = new InsertAction(); //定义两个监视器
ActionListener command = new CommandAction();
addButton("Bck",0,1,1,1,insert); //通过定义好的方法添加按钮
addButton("CE",1,1,1,1,insert);
//addButton("显示文字",gridx(行),gridy(列)从0开始,占几个x区域,,占几个y,insert插入
addButton("CLEAR",2,1,2,1,insert);
addButton("7",0,2,1,1,insert);
addButton("8",1,2,1,1,insert);
addButton("9",2,2,1,1,insert);
addButton("/",3,2,1,1,command);
addButton("4",0,3,1,1,insert);
addButton("5",1,3,1,1,insert);
addButton("6",2,3,1,1,insert);
addButton("*",3,3,1,1,command);
addButton("1",0,4,1,1,insert);
addButton("2",1,4,1,1,insert);
addButton("3",2,4,1,1,insert);
addButton("-",3,4,1,1,command);
addButton("0",0,5,1,1,insert);
addButton("+/-",1,5,1,1,insert);//只显示"-"号,"+"没有实用价值
addButton(".",2,5,1,1,insert);
addButton("+",3,5,1,1,command);
addButton("13号韩乾凤版权",0,6,3,1,insert);//占3个单元格,
addButton("=",3,6,1,1,command);
setSize(500,500); //设置窗口的大小
setVisible(true); //设置窗口可见
}
private void addButton(String label,int row,int column,int with,int
height,ActionListener listener) {
//定义添加按钮的方法
JButton button=new JButton(label); //新建一个按钮的对象
constraints.gridx=row;
constraints.gridy=column;
constraints.gridwidth=with;
constraints.gridheight=height;
constraints.fill=GridBagConstraints.BOTH; //定义控件填充满剩余空间
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);
constraints.insets=new Insets(1,1,1,1);//设置按钮间的间距
button.setForeground(Color.black);//按钮字体颜色
button.setBorderPainted(true);
button.setContentAreaFilled(true);
button.setBounds(2,2,2,2);
button.contains(5,5);//行列几个按钮
//button.setEnabled(false);
}
private class InsertAction implements ActionListener {
//定义Insert事件的方法
public void actionPerformed(ActionEvent event) {
String input=event.getActionCommand();
if (start) {
displayField.setText(""); //默认计算区域为空
start=false;
if(input.equals("+/-"))
displayField.setText(displayField.getText()+"-");
//如果开始输入的是"+/-",以负数显示
}
if(!input.equals("+/-")) {
if(input.equals("Bck")) {
String str=displayField.getText();
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1));
//如果单击退格,实现退格的功能
}else if(input.equals("CE")||input.equals("CLEAR")) {
displayField.setText("0");
start=true; //实现清零和复位的功能
}else if(input.equals("韩乾风版权!")){
}
else if(input.equals(".")){
if(displayField.getText().trim().indexOf(".")!=-1){
}
else
displayField.setText(displayField.getText()+input);//输入小数点时,判断是否已经输入过小数点
}
else
displayField.setText(displayField.getText()+input);
}
}
}
private class CommandAction implements ActionListener {
public void actionPerformed(ActionEvent evt) {
String command=evt.getActionCommand();
if(start) {
lastCommand=command;
}else {
calculate(Double.parseDouble(displayField.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; //实现计算的功能
displayField.setText(""+ result); //显示计算的结果
}
public static void main(String []args) { //主函数
jisuanqi calculator=new jisuanqi();
calculator.setResizable(false);//不可调整大小
calculator.setForeground(Color.MAGENTA);
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//关闭窗口,退出程序
}
}