学了Java的GUI后,做了个super简单的计算器,只能做加法。(萌新日常记录,大佬发现有什么问题欢迎评论区留言)
都是很简单的知识,其中主要涉及GridLayout布局的应用、添加监听器、两个控件、还有响应事件、内部类…
详细代码如下:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class CalculatorInWindow extends JFrame {
JButton button;
JButton button1;
JTextField text1;
JTextField text2;
JTextArea text3;
ReaderListen listener;
public CalculatorInWindow() {
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init() {
setLayout(new GridLayout(3,3)); //使用GridLayout布局生成3x3的网格状布局
listener=new ReaderListen();
add(new JLabel("加数1")); //添加便签
text1=new JTextField();
text1.addActionListener(listener); //添加监听器监听texe1
add(new JScrollPane(text1)); //在文本框添加滚动条,并将文本框添加到窗口
add(new JLabel("")); //添加空白的便签,填充右边空白区域
add(new JLabel("加数2"));
text2=new JTextField();
text2.addActionListener(listener); //添加监听器监听texe2
add(new JScrollPane(text2));
add(new JLabel(""));
button=new JButton("求和");
button.addActionListener(listener); //添加监听器监听button
add(button);
text3=new JTextArea();
add(new JScrollPane(text3));
button1=new JButton("清空");
button1.addActionListener(listener); //添加监听器监听button1
add(button1);
}
class ReaderListen implements ActionListener{ //内部类实现事件处理简化过程
public void actionPerformed(ActionEvent e) {
//由于上面只用一个监听器监听所有的控件,所以接下来进行监听器监听到的事件进行分类处理
//利用getSource()函数获取事件源对象的引用,然后用equals()函数判断是否与将要处理的对象相等。
if(e.getSource().equals(text1)){
text1.transferFocus(); //对文本框1回车进行光标下移处理
}
else if(e.getSource().equals(button)||e.getSource().equals(text2)) { //对文本框2和求和按钮事件进行处理
String str1=text1.getText(); //获取文本框1和2的内容
String str2=text2.getText();
try { //对于在文本框1和文本框2输入非数字进行异常处理
double x1 = Double.parseDouble(str1); //对文本框1和文本框2数字以字符串的形式转换成double类型
double x2 = Double.parseDouble(str2);
text3.setText(null); //将文本框3置空,防止进行多次求和按钮后在文本框3的结果叠加。
text3.append(String.valueOf(x1+x2));
}catch (Exception e1) { //对输入非数字按求和进行提醒
JOptionPane.showMessageDialog(null, "没输入数字或者输入的数字中含有非法字符,请重新输入", "数据错误", JOptionPane.ERROR_MESSAGE);
}
}
else if(e.getSource().equals(button1)) { //对清空按钮实现置空
text1.setText(null);
text2.setText(null);
text3.setText(null);
}
}
}
}
public class Text {
public static void main(String args[]) {
CalculatorInWindow cal=new CalculatorInWindow();
cal.setBounds(300,350,310,260); //设置窗口大小和初始位置
cal.setTitle("计算器"); //设置窗口标题
}
}
文中已经有大量的说明,我就不再这唠叨了。
至于结果嘛,运行就知道啦(运行后别回来骂我鸭
(由于个别原因,代码中用了大量的注释,请不要模仿)