用Swing做一个普通计算器
用swing做更加复杂的计算器
https://blog.csdn.net/dark_souls/article/details/89672759
由于上一篇文章用的一个主类调用科学和普通计算器,现在补充一个普通的计算器
package Cacultor_1;
import javax.swing.*;
import javax.xml.soap.Text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.Key;
/**
**@author 李正阳
**/
public class CacultorL extends JFrame implements ActionListener{
private final String keys[]={"%","√","x^2","1/x","CE","C","<- ","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","="}; //主要按钮
private final String Rom[]={"MC","MR","M+","M-","MS","M"};
private JButton Keys[]=new JButton[keys.length]; //创建按钮组
private JButton rom[]=new JButton[Rom.length];
static JMenuBar menuBar=new JMenuBar();
JPanel CenterPanel=new JPanel();
JPanel NorthPanel=new JPanel();
JPanel SouthPanel=new JPanel();
JTextField textField=new JTextField(17);//下文本域
JTextField textFieldUp=new JTextField(17);//上文本域
private double left; //计算中存左值
private double right; //计算中存右值
private double result;
private String Result;
private String temp="";
private static int option;
private static String temp1="";
public static void main(String[] args) {
CacultorL window=new CacultorL(); //设置Jframe窗口的基本配置
window.setSize(500,300);
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//添加最大化最小化组件
window.pack(); //自适应大小
window.setJMenuBar(menuBar); //创建菜单
window.setVisible(true); //显示窗口
}
public CacultorL(){ //构造函数初始化计算器
JMenu fileItem=new JMenu(" 功能菜单"); //菜单组件
JMenuItem card1=new JMenuItem(" 科学");
JMenuItem card2=new JMenuItem(" 文件处理");
menuBar.add(fileItem);
fileItem.add(card1);
fileItem.add(card2);
SouthPanel.setLayout(new GridLayout(2,1)); //设置网格布局
CenterPanel.setLayout(new GridLayout(6,4));
NorthPanel.setLayout(new GridLayout(1,6));
CenterPanel.setPreferredSize(new Dimension(400,300));//设置jpanel的大小
NorthPanel.setPreferredSize(new Dimension(50,50));
addRom(Rom);
for(int i=0;i<keys.length;i++) { //将按钮添加上监视器,放在面板上
addKeys(keys[i],i);
}
SouthPanel.add(textFieldUp); //添加上文本域
SouthPanel.add(textField);
add(SouthPanel,BorderLayout.NORTH);
add(CenterPanel,BorderLayout.SOUTH);
add(NorthPanel,BorderLayout.CENTER);
textField.setHorizontalAlignment(JTextField.RIGHT); //锁定成不可修改
textField.setEditable(false);
textFieldUp.setHorizontalAlignment(JTextField.RIGHT);
textFieldUp.setEditable(false);
}
public void addKeys(String keys,int i){
Keys[i]= new JButton(keys);
CenterPanel.add(Keys[i]);
Keys[i].addActionListener(this);
}
public void addRom(String Rom[]){
for(int i=0;i<Rom.length;i++){
rom[i]= new JButton(Rom[i]);
NorthPanel.add(rom[i]);
}
}
@Override
public void actionPerformed(ActionEvent e) { //数字键盘的监视器
if(e.getSource()==Keys[8]){
temp+="7";
temp1+="7";
textField.setText(temp);
}else if(e.getSource()==Keys[9]){
temp1+="8";
temp+="8";
textField.setText(temp);
}else if(e.getSource()==Keys[10]){
temp1+="9";
temp+="9";
textField.setText(temp);
}else if(e.getSource()==Keys[12]){
temp1+="4";
temp+="4";
textField.setText(temp);
}else if(e.getSource()==Keys[13]){
temp1+="5";
temp+="5";
textField.setText(temp);
}else if(e.getSource()==Keys[14]){
temp1+="6";
temp+="6";
textField.setText(temp);
}else if(e.getSource()==Keys[16]){
temp1+="1";
temp+="1";
textField.setText(temp);
}
else if(e.getSource()==Keys[17]){
temp1+="2";
temp+="2";
textField.setText(temp);
}
else if(e.getSource()==Keys[18]){
temp1+="3";
temp+="3";
textField.setText(temp);
}
if(e.getSource()==Keys[0]){
left=Double.parseDouble(textField.getText());
textField.setText("");
temp="";
temp1+="%";
textFieldUp.setText(temp1);
option=2;
}else if(e.getSource()==Keys[23]){ //等于号方法
if(option==1){
String Right=textField.getText();
right=Double.parseDouble(Right);
result=left+right;
Result=""+result;
}else if (option==2){
right=Double.parseDouble(textField.getText());
result=left%right;
Result=""+result;
}else if(option==3){
right=Double.parseDouble(textField.getText());
result=left/right;
Result=""+result;
}else if(option==4){
right=Double.parseDouble(textField.getText());
result=left*right;
Result=""+result;
}else if(option==5){
right=Double.parseDouble(textField.getText());
result=left-right;
Result=""+result;
}
textField.setText(Result);
}else if (e.getSource()==Keys[1]){ //加减乘除等功能键的监视器方法
left=Double.parseDouble(textField.getText());
textField.setText("");
temp="";
result=Math.sqrt(left);
Result=""+result;
textFieldUp.setText(Result);
}else if(e.getSource()==Keys[2]){
left=Double.parseDouble(textField.getText());
textField.setText("");
temp="";
result=left*left;
Result=""+result;
textFieldUp.setText(Result);
}else if(e.getSource()==Keys[3]){
left=Double.parseDouble(textField.getText());
textField.setText("");
temp="";
result=1/left;
Result=""+result;
textFieldUp.setText(Result);
}else if(e.getSource()==Keys[4]){
textField.setText("");
temp="";
temp1="";
}else if(e.getSource()==Keys[19]){
left=Double.parseDouble(textField.getText());
temp1+="+";
textFieldUp.setText(temp1);
textField.setText("");
temp="";
option=1;
}else if(e.getSource()==Keys[5]){
textField.setText("");
temp="";
temp1="";
}else if(e.getSource()==Keys[6]){
textField.setText("");
temp="";
temp1="";
}else if(e.getSource()==Keys[7]){
left=Double.parseDouble(textField.getText());
temp1+="/";
textFieldUp.setText(temp1);
textField.setText("");
temp="";
option=3;
}else if(e.getSource()==Keys[11]){
left=Double.parseDouble(textField.getText());
temp1+="*";
textFieldUp.setText(temp1);
textField.setText("");
temp="";
option=4;
}else if(e.getSource()==Keys[15]){
left=Double.parseDouble(textField.getText());
temp1+="-";
textFieldUp.setText(temp1);
textField.setText("");
temp="";
option=5;
}else if(e.getSource()==Keys[22]){
temp1+=".";
temp+=".";
textField.setText(temp);
}
}
class ROM implements ActionListener{//加减乘除的监视器
@Override
public void actionPerformed(ActionEvent e) {//未完成的计算器方法
if(e.getSource()==Keys[0]){
}
}
}
}
运行界面