设置窗口的打开位置以及窗口的长和宽
frame.setBounds(200, 200, 400, 320);
将文本框添加在窗口北部区域
frame.add(inputBox, BorderLayout.NORTH);
2.3.2 设置按钮布局
Panel panel = new Panel();
panel.setLayout(new GridLayout(5, 4, 3, 3));
Panel
是内嵌式容器,必须内嵌在其它容器中使用,不能独立存在。其默认使用FlowLayout
布局管理器。但我使用的是GridLayout
网式布局管理器,可以将区域划分为 row*col
个小区域,GridLayout
构造方法GridLayout(rows,cols,hgap,vgap)
四个参数分别指定了要划分的行、列、水平间距和垂直间距。
2.3.3 设置按钮
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]);//将按钮放入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;
} else {
number1 = Double.parseDouble(inputBox.getText());
operator = e.getActionCommand();
unfinishedReading = false;
}
} else if (label.equals(“<-”)) {
String expression = inputBox.getText();
if (expression.length() != 0) {
expression = expression.substring(0, expression.length() - 1);
inputBox.setText(expression);
} else if (expression.length() == 0 && inputBox.getText().length() != 0)
// 对于计算结果后避免删除键不能清楚结果显示
inputBox.setText(expression);
} else if (label.equals(“AC”)) {
inputBox.setText(“”);
unfinishedReading = false;
} else {
String s = inputBox.getText();
if (!unfinishedReading)
inputBox.setText(label);
else
inputBox.setText(s + label);
unfinishedReading = true;
}
}
}
public static void main(String[] args) {
new Calculation();
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
写在最后
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。
最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ava程序员面试笔试真题库.pdf**”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
[外链图片转存中…(img-A7pAwED4-1713528003743)]
Java经典面试问题(含答案解析)
[外链图片转存中…(img-LKSfCwqr-1713528003744)]
阿里巴巴技术笔试心得
[外链图片转存中…(img-0Y1Dapv1-1713528003746)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!