📄 cal.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class cal extends JFrame//定义主类 MyCaculator
implements ActionListener,ItemListener//接口继承 常用事件处理
{
CheckboxGroup cbg=new CheckboxGroup();
ButtonGroup g=new ButtonGroup();
JRadioButton rb1=new JRadioButton("HEX",false);
JRadioButton rb2=new JRadioButton("DEC",true);
JButton Button_1=new JButton("1");
JButton Button_2=new JButton("2");
JButton Button_3=new JButton("3");
JButton Button_4=new JButton("4");
JButton Button_5=new JButton("5");
JButton Button_6=new JButton("6");
JButton Button_7=new JButton("7");
JButton Button_8=new JButton("8");
JButton Button_9=new JButton("9");
JButton Button_0=new JButton("0");
JButton Button_A=new JButton("A");
JButton Button_B=new JButton("B");
JButton Button_C=new JButton("C");
JButton Button_D=new JButton("D");
JButton Button_E=new JButton("E");
JButton Button_F=new JButton("F");
JButton Button_Add=new JButton("+");
JButton Button_Del=new JButton("-");
JButton Button_Div=new JButton("/");
JButton Button_Mul=new JButton("*");
JButton Button_Equ=new JButton("=");
JButton Button_Min=new JButton("+/-");
JButton Button_Dot=new JButton(".");
JButton Button_CE=new JButton("CE");
JTextField TextField=new JTextField(15);//创建输入单行文本区域对象
JPanel Panel=new JPanel();
JPanel Buttons=new JPanel();
float Left,Right,Result=0,save,save1,result; //保存数值
int Type;//运算类型标示
int temp,temp1=0;
boolean flag=false;//为十六进制下的计算此标志便为true
public void actionPerformed(ActionEvent e)//对用户输入做出响应
{
try{
if(e.getSource()==Button_Add)
{
if(flag){
Left=(float)Long.parseLong(TextField.getText(),16);
}else{
Left=Float.parseFloat(TextField.getText()); //保存第一操作数
TextField.setText(Float.toString(Left));//窗口内容重填
}
Type=1;
temp1=1;
}
if(e.getSource()==Button_Del)
{
if(flag){
Left=(float)Long.parseLong(TextField.getText(),16);
}else{
Left=Float.parseFloat(TextField.getText()); //保存第一操作数
TextField.setText(Float.toString(Left));//窗口内容重填
}
Type=2;
temp1=1;
}
if(e.getSource()==Button_Mul)
{
if(flag){
Left=(float)Long.parseLong(TextField.getText(),16);
}else{
Left=Float.parseFloat(TextField.getText()); //保存第一操作数
TextField.setText(Float.toString(Left));//窗口内容重填
}
Type=3;
temp1=1;
}
if(e.getSource()==Button_Div)
{
if(flag){
Left=(float)Long.parseLong(TextField.getText(),16);
}else{
Left=Float.parseFloat(TextField.getText()); //保存第一操作数
TextField.setText(Float.toString(Left));//窗口内容重填
}
Type=4;
temp1=1;
}
if(e.getSource()==Button_Min)
{save=Float.parseFloat(TextField.getText());
save1=0-save;
TextField.setText(Float.toString(save1));
}
}catch(NumberFormatException ex){}
if(e.getSource()==Button_Equ)
{ temp1=1;
switch(Type)
{
case 1:
if(flag){
Right=(float)Long.parseLong(TextField.getText(),16);
Result=Left+Right;
TextField.setText(Long.toHexString((long)Result).toUpperCase());
}else{
Right=Float.parseFloat(TextField.getText());//保存第二操作数
Result=Left+Right; //计算结果
temp=(int)Left;
if((float)temp==Result)
TextField.setText(Integer.toString(temp));
else TextField.setText(Float.toString(Result));}//输出第二操作数
break;
case 2:
if(flag){
Right=(float)Long.parseLong(TextField.getText(),16);
Result=Left-Right;
TextField.setText(Long.toHexString((long)Result).toUpperCase());
}else{
Right=Float.parseFloat(TextField.getText());//保存第二操作数
Result=Left-Right; //计算结果
temp=(int)Left;
if((float)temp==Result)
TextField.setText(Integer.toString(temp));
else TextField.setText(Float.toString(Result));}//输出结果
break;
case 3:
if(flag){
Right=(float)Long.parseLong(TextField.getText(),16);
Result=Left*Right;
TextField.setText(Long.toHexString((long)Result).toUpperCase());
}else{
Right=Float.parseFloat(TextField.getText());//保存第二操作数
Result=Left*Right; //计算结果
temp=(int)Left;
if((float)temp==Result) //判断浮点数是否可以直接转换为整形数
TextField.setText(Integer.toString(temp));
else TextField.setText(Float.toString(Result));}//输出结果
break;
case 4:
if(flag){
Right=(float)Long.parseLong(TextField.getText(),16);
Result=Left/Right;
TextField.setText(Long.toHexString((long)Result).toUpperCase());
}else{
Right=Float.parseFloat(TextField.getText());//保存第二操作数
Result=Left/Right; //计算结果
temp=(int)Left;
if((float)temp==Result)
TextField.setText(Integer.toString(temp));
else
TextField.setText(Float.toString(Result));}//输出结果
break;
}
}
if(e.getSource()==Button_CE)
{TextField.setText("0");
temp1=1;
}
if(e.getSource()==Button_1)
{ if(temp1==1)
{TextField.setText("1");
temp1=0;}
else TextField.setText(TextField.getText()+"1");
}
if(e.getSource()==Button_2)
{ if(temp1==1)
{TextField.setText("2");
temp1=0;}
else TextField.setText(TextField.getText()+"2");
}
if(e.getSource()==Button_3)
{if(temp1==1)
{TextField.setText("3");
temp1=0;}
else TextField.setText(TextField.getText()+"3");
}
if(e.getSource()==Button_4)
{if(temp1==1)
{TextField.setText("4");
temp1=0;}
else TextField.setText(TextField.getText()+"4");
}
if(e.getSource()==Button_5)
{if(temp1==1)
{TextField.setText("5");
temp1=0;}
else TextField.setText(TextField.getText()+"5");
}
if(e.getSource()==Button_6)
{if(temp1==1)
{TextField.setText("6");
temp1=0;}
else TextField.setText(TextField.getText()+"6");
}
if(e.getSource()==Button_7)
{if(temp1==1)
{TextField.setText("7");
temp1=0;}
else TextField.setText(TextField.getText()+"7");
}
if(e.getSource()==Button_8)
{if(temp1==1)
{TextField.setText("8");
temp1=0;}
else TextField.setText(TextField.getText()+"8");
}
if(e.getSource()==Button_9)
{if(temp1==1)
{TextField.setText("9");
temp1=0;}
else TextField.setText(TextField.getText()+"9");
}
if(e.getSource()==Button_0)
{if(temp1==1)
{TextField.setText("0");
temp1=0;}
else TextField.setText(TextField.getText()+"0");
}
if(e.getSource()==Button_Dot){
TextField.setText(TextField.getText()+".");
temp1=0;
}
if(e.getSource()==Button_A)
{
if(flag){
if(temp1==1)
TextField.setText("A");
else TextField.setText(TextField.getText()+"A");
temp1=0;
}
}
if(e.getSource()==Button_B)
{
if(flag){
if(temp1==1)
TextField.setText("B");
else TextField.setText(TextField.getText()+"B");
temp1=0;
}
}
if(e.getSource()==Button_C)
{
if(flag){
if(temp1==1)
TextField.setText("C");
else TextField.setText(TextField.getText()+"C");
temp1=0;
}
}
if(e.getSource()==Button_D)
{
if(flag){
if(temp1==1)
TextField.setText("D");
else TextField.setText(TextField.getText()+"D");
temp1=0;
}
}
if(e.getSource()==Button_E)
{
if(flag){
if(temp1==1)
TextField.setText("E");
else TextField.setText(TextField.getText()+"E");
temp1=0;
}
}
}//end of method actionPerformed
public void itemStateChanged(ItemEvent e){
try{
if(rb1.isSelected()){
flag=true;
float temp=Float.parseFloat(TextField.getText());
TextField.setText(Long.toHexString((long)temp).toUpperCase());
Button_A.setEnabled(true);
Button_B.setEnabled(true);
Button_C.setEnabled(true);
Button_D.setEnabled(true);
Button_E.setEnabled(true);
Button_F.setEnabled(true);
Button_Dot.setEnabled(false);
}
if(rb2.isSelected()){
flag=false;
TextField.setText(""+Long.parseLong(TextField.getText(),16));
Button_A.setEnabled(false);
Button_B.setEnabled(false);
Button_C.setEnabled(false);
Button_D.setEnabled(false);
Button_E.setEnabled(false);
Button_F.setEnabled(false);
Button_Dot.setEnabled(true);
}
}catch(NumberFormatException ex){
if(rb1.isSelected()){
flag=true;
Button_A.setEnabled(true);
Button_B.setEnabled(true);
Button_C.setEnabled(true);
Button_D.setEnabled(true);
Button_E.setEnabled(true);
Button_F.setEnabled(true);
Button_Dot.setEnabled(false);
}else{
flag=false;
Button_A.setEnabled(false);
Button_B.setEnabled(false);
Button_C.setEnabled(false);
Button_D.setEnabled(false);
Button_E.setEnabled(false);
Button_F.setEnabled(false);
Button_Dot.setEnabled(true);
}
}
}//end of method itemStateChanged
public cal()//对对象初始化
{
super("MyCaculator");
this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
Button_1.addActionListener(this);
Button_2.addActionListener(this);
Button_3.addActionListener(this);
Button_4.addActionListener(this);
Button_5.addActionListener(this);
Button_6.addActionListener(this);
Button_7.addActionListener(this);
Button_8.addActionListener(this);
Button_9.addActionListener(this);
Button_0.addActionListener(this);
Button_A.addActionListener(this);
Button_B.addActionListener(this);
Button_C.addActionListener(this);
Button_D.addActionListener(this);
Button_E.addActionListener(this);
Button_Add.addActionListener(this);//事件监听
Button_Del.addActionListener(this);//事件监听
Button_Div.addActionListener(this);//事件监听
Button_Mul.addActionListener(this);//事件监听
Button_Dot.addActionListener(this);
Button_CE.addActionListener(this);
Button_Min.addActionListener(this);
g.add(rb1);g.add(rb2);//实现有两个单选按钮的按钮组
rb1.addItemListener(this);//"HEX"
rb2.addItemListener(this);//"DEC"
Panel.setLayout(new FlowLayout());//将TextField加入窗口
Panel.add(rb1);
Panel.add(TextField);
Panel.add(rb2);
Buttons.setLayout(new GridLayout(4,4));
Buttons.add(Button_1);
Buttons.add(Button_2);
Buttons.add(Button_3);
Buttons.add(Button_CE);
Buttons.add(Button_Add);
Buttons.add(Button_Del);
Buttons.add(Button_4);
Buttons.add(Button_5);
Buttons.add(Button_6);
Buttons.add(Button_Div);
Buttons.add(Button_Mul);
Buttons.add(Button_Min);
Buttons.add(Button_7);
Buttons.add(Button_8);
Buttons.add(Button_9);
Buttons.add(Button_0);
Buttons.add(Button_Dot);
Buttons.add(Button_Equ);
Buttons.add(Button_A);
Buttons.add(Button_B);
Buttons.add(Button_C);
Buttons.add(Button_D);
Buttons.add(Button_E);
Buttons.add(Button_F);
Button_Equ.addActionListener(this);//事件监听
getContentPane().add(Panel,"North");//将Panel加入窗口
getContentPane().add(Buttons,"Center");
Button_A.setEnabled(false);//初始化为十进制,所以按钮A,B,C,D,E,.不可用
Button_B.setEnabled(false);
Button_C.setEnabled(false);
Button_D.setEnabled(false);
Button_E.setEnabled(false);
Button_F.setEnabled(false);
}//end of constructor
public static void main(String args[])//定义主类中的main方法
{
try {
UIManager.setLookAndFeel("com.sun.java."+
"swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e) {
e.printStackTrace();
}//改变界面风格为windows风格
System.out.println("Starting MyCaculator");
cal f = new cal();
f.setSize(320,200);
f.setResizable(false);
f.setVisible(true);
//f.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -