“0”, “.”, “=”, “/”};
for (int i = 0; i < s.length; i++) {
button[i] = new Button(s[i]);//设置按钮上的字符
button[i].addActionListener(new ActionListen());//设置按钮监听
panel.add(button[i]);//将按钮放入Panel容器中
}
2.3.4 设置窗口可见,注册窗口监听
将panel设置在中部区域
frame.add(panel,BorderLayout.CENTER);
设置窗口可见
frame.setVisible(true);
窗口监听器,注册监听,可以关闭窗口
frame.addWindowListener(new WindowAdapter() { //匿名内部类
//窗口监听器,注册监听,可以关闭窗口
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); //关闭程序
}
});
WindowAdapter
适配器实现了所有的接口方法,以空方法的形式,在其子类中只要重写需要的就行,也是一种设计模式,适配器模式:因为如果要实现所有接口实在太多,不方变,采用这种过渡类.
2.4 ActionListen类实现ActionListener接口
2.4.1 public void actionPerformed(ActionEvent e)
这是接口 ActionListener
里面定义的一个抽象方法,所有实现这个接口的类都要重写这个方法。一般情况下,这是在编写GUI程序时,组件发生“有意义”的事件时会调用这个方法,比如按钮被按下,文本框内输入回车时都会触发这个事件,然后调用你编写的事件处理程序。实现过程大体如下:编写一个 ActionListener
类的监听器,组件注册该监听器,监听器内部要编写这个 actionPerformed
方法。
2.4.2 动作事件(ActionEvent e)
ActionEvent
包含一个事件,该事件为执行动作事件ACTION_PERFORMED
.触发这个事件的动作为:
• 点击按钮。
• 双击列表中选项。
• 选择菜单项。
• 在文本框中输入回车。
常用方法如下:
public String getActionCommand()
返回引发某个事件的命令按钮的名字,如果名字为空,那么返回标签值。
public void setActionCommand(String command)
设置引发事件的按钮的名字,默认设置为按钮的标签。
2.4.3 number1 = Double.parseDouble(inputBox.getText())
Double.parseDouble
方法是把数字类型的字符串,转换成double
类型。
• parseDouble
方法得到的数据类型不能继续编译,因为这个方法得到的是 double
,是Java的基本数据类型。
• valueOf
方法得到的数据类型可以继续往下编,因为这个方法得到的是 Double
,是对象,属于Java的引用数据类型。
2.4.4 inputBox.getText() & inputBox.setText()
获得文本框的内容和设置文本框的内容
2.4.5 expression = expression.substring(0, expression.length() - 1);
public String substring (int beginIndex, int endIndex);
这个方法截取的字符串从 beginIndex
开始,到字符串索引的 endIndex - 1
结束,即截取的字符串不包括 endIndex
这个索引对应的字符,所以 endIndex
的最大值为整个字符串的长度,所以使用这个方法的时候需要特别注意容易发生字符串截取越界的问题
3.1 Java版本:
java version “1.8.0_231”
Java™ SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot™ 64-Bit Server VM (build 25.231-b11, mixed mode)
3.2 IDE:
IntelliJ IDEA 2021.2.1
3.3 完整代码
package Calculator;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Calculation{
double number1, number2;//记录运算的两个数字
String operator;
boolean unfinishedReading;
Frame frame = new Frame(“高齐勉的计算器!”);
TextField inputBox = new TextField(30);
Button[] button = new Button[20];
Calculation() {
//设置输入文本框位置
frame.setBounds(200, 200, 400, 320);
frame.add(inputBox, BorderLayout.NORTH);
//设置按钮布局
Panel panel = new Panel();
panel.setLayout(new GridLayout(5, 4, 3, 3));
//设置按钮,并将按钮加入panel
String[] s = {“sqrt”, “<-”, “AC”,“%”, “7”, “8”, “9”, “+”, “4”, “5”, “6”, “-”, “1”, “2”, “3”, “*”, “0”, “.”, “=”, “/”};
for (int i = 0; i < s.length; i++) {
button[i] = new Button(s[i]);
button[i].addActionListener(new ActionListen());
panel.add(button[i]);
}
frame.add(panel,BorderLayout.CENTER);//将panel设置在中部区域
frame.setVisible(true);//设置窗口可见
frame.addWindowListener(new WindowAdapter() {//窗口监听器,注册监听,可以关闭窗口
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public class ActionListen implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {//获取事件源的标签
String label = e.getActionCommand();
if (label.equals(“=”)) {
number2 = Double.parseDouble(inputBox.getText());
unfinishedReading = true;
switch (operator) {
case “+”:
inputBox.setText(number1 + number2 + “”);
break;
case “-”:
inputBox.setText(number1 - number2 + “”);
break;
case “*”:
inputBox.setText(number1 * number2 + “”);
break;
case “/”:
if (number2 != 0)
inputBox.setText(number1 / number2 + “”);
else
inputBox.setText(“inf”);
break;
case “%”:
inputBox.setText(number1 % number2 + “”);
break;
case “sqrt”:
inputBox.setText( Math.sqrt(number1) + “”);
break;
case “^2”:
inputBox.setText(number2 * number2 + “”);
break;
}
} else if (label.equals(“+”) || label.equals(“*”) || label.equals(“/”) || label.equals(“%”) || label.equals(“sqrt”)) {
number1 = Double.parseDouble(inputBox.getText());
operator = e.getActionCommand();
unfinishedReading = false;
} else if (label.equals(“-”)) {
if (!unfinishedReading) {
inputBox.setText(“-”);
unfinishedReading = true;
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
g-K9KkSdRM-1711090491080)]
[外链图片转存中…(img-Uf5BOwMr-1711090491081)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-PsGkLp0G-1711090491081)]
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。