制作简易calculator整体流程
step1
通过学习网上视频教程,利用java.jdk11和Intellij IDEA Community Edition,实现calculator的图形界面设计。
即添加计算器的 Button—>按钮 和 用于显示输入数字、输出结果的JTextField—>文本框
step2
给按钮和文本框添加鼠标监听事件。
step3
实现加减乘除、开方、平方、清零和退格功能。
小白第一天
上午:calculator图形界面设计
1、利用Container类定义一个顶级容器c
Container c = getContentPane();
2、建立一个网格管理布局器1—>2行1列
c.setLayout(new GridLayout(2, 1));
3、用类JTextField新建文本框jtf—>指定文本内容"0"并列初始化"0"
JTextField jtf = new JTextField("0", 0);
4、设置jtf水平对齐方式:居右对齐
jtf.setHorizontalAlignment(JTextField.RIGHT);
//jtf对齐方式:居左、居中、居右
5、用类JButton新建按钮并赋对应值
JButton data0 = new JButton("0");
/*
data1~data9和point(点号)~ql(清零)
格式均与data0一样,不再详述
按钮有:
data7、data8、data9、plus、sqr
data4、data5、data6、minus、root
data1、data2、data3、mtp、ql
data0、point、equ、dvd、tg
*/
6、用类JPanel新建面板jp
JPanel jp = new JPanel();
7、新建网格布局管理器2(行数,列数,按钮间水平、垂直间距)
jp.setLayout(new GridLayout(4, 5, 7, 7));
8、调用add()函数,把对应按钮加到面板jp中
jp.add(data7);
/*
以下按钮格式均与data7相同,
填入对应内容即可。
按钮在面板jp中布局:
data7、data8、data9、plus、sqr(开方)
data4、data5、data6、minus、root(平方)
data1、data2、data3、mtp、ql(清零)
data0、point、equ、dvd、tg(退格)
*/
9、把文本框jtf加到顶级容器c中
c.add(jtf);
10、把面板jp加到顶级容器c中
c.add(jp);
11、窗体大小
setSize(400, 400);
12、窗体标题
setTitle("小白计算器");
13、窗体可视化
setVisible(true);
14、固定窗体大小,用户不能自由改变
setResizable(false);
15、单击窗口关闭按钮时程序执行的操作
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
下午:给按钮和文本框添加鼠标监听
通过对象调用函数addActionListener(arg0 ->{ })
实现按钮和文本框的鼠标监听
1、data0的鼠标监听
data0.addActionListener(arg0 -> {
if(jtf.getText().equals("0")){
//将按钮值与0作比较
jtf.requestFocus();
/*把输入焦点放在调用这个
方法的控件上--->即把光标
放在文本框jtf里
*/
}else{
String str
=jtf.getText();
//取得当前按钮的按钮值
jtf.setText(str+"0");
//将文本内容后加上字符0
}
});
2、data1的鼠标监听
data1.addActionListener(arg0 -> {
if(jtf.getText().equals("0")) {
//将按钮值与0作比较
jtf.setText("");
//将文本框初始化为空
jtf.setText("1");
//将文本框内容置为 1
jtf.requestFocus();
/*把输入焦点放在调用这个
方法的控件上--->即把光标
放在文本框jtf里
*/
} else {
String str =
jtf.getText();
//取得当前按钮的按钮值
jtf.setText(str + "1");
//将文本内容后加上字符1
}
});
3、data3~data9
鼠标监听格式与data1相同,填入相对应的内容即可。
4、“.”、“+”、“-”、“*”、“/”
鼠标监听格式与data1相同,填入相对应的内容即可。
5、清零
ql.addActionListener(e -> {
jtf.setText("0");
//将文本框置为0--->清零功能
});
小白第二天
上午:实现加减乘除
监听“等号”—>实现加减乘除
同样调用函数addActionListener(arg0 ->{ })
实现加减乘除
equ.addActionListener(arg0 -> {
//处理“等号” 按键被按下事件
//加法
if (jtf.getText().contains("+")) {
//将字符串分割为子字符串,然后将结果作为字符串数组返回
String[] s = jtf.getText().split("[+]");//转义字符,要用"[+]"或者"\+"
Double d1 = Double.parseDouble(s[0]);//返回一个指定字符串表示的double值
Double d2 = Double.parseDouble(s[1]);
double ans = d1 + d2;
String answer = String.valueOf(ans);//将结果转换为字符串
jtf.setText(answer);//将加法运算的结果以字符串形式在文本框中显示
}
//减法
else if (jtf.getText().contains("-")) {
String[] s = jtf.getText().split("-");
jtf.setText("");
Double d1 = Double.parseDouble(s[0]);
Double d2 = Double.parseDouble(s[1]);
double ans = d1 - d2;
String answer = String.valueOf(ans);
jtf.setText(answer);
}
//乘法运算
else if (jtf.getText().contains("*")) {
String[] s = jtf.getText().split("[*]");
//*是转义字符,要用"[*]",或者"\*"
jtf.setText("");
Double d1 = Double.parseDouble(s[0]);
Double d2 = Double.parseDouble(s[1]);
double ans = d1 * d2;
String answer = String.valueOf(ans);
jtf.setText(answer);
}
//除法运算
else if (jtf.getText().contains("/")) {
String[] s = jtf.getText().split("/");
jtf.setText("");
Double d1 = Double.parseDouble(s[0]);
Double d2 = Double.parseDouble(s[1]);
double ans = d1 / d2;
String answer = String.valueOf(ans);
jtf.setText(answer);
} else {
jtf.setText("请选择要进行的运算");
}
});
下午:实现平方、开方
平方—>监听sqrt键
root.addActionListener(e -> {
//root键被按事件
String i = jtf.getText()