GUI学习——day2
2026/7/23 5:17:33 网站建设 项目流程

事件监听

当某个事件完成时,会做什么

如 按下按钮,生成aaa

package com.kuang.lesson02; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; public class TestActionEvent { public static void main(String[] args){ //按下按钮,触发一些事件 Frame frame = new Frame(); Button button = new Button(); //因为,addActionListener()需要一个ActionListener,所以我们需要构造一个ActionListener MyActionListener myActionListener = new MyActionListener(); button.addActionListener(myActionListener); frame.add(button,BorderLayout.CENTER); frame.pack(); windowClose(frame);//关闭窗口 frame.setVisible(true); } //关闭窗口的事件 private static void windowClose(Frame frame){ frame.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ System.exit(0); } }); } } //事件监听 class MyActionListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.out.println("aaa"); } }

一个监听器监听多个组件

package com.kuang.lesson02; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionEventTwo { public static void main(String[] args) { //两个按钮实现同一个监听 Frame frame = new Frame("开始-停止"); Button button1 = new Button("start"); Button button2 = new Button("stop"); button2.setActionCommand("button2-stop"); MyMonitor myMonitor = new MyMonitor(); button1.addActionListener(myMonitor); button2.addActionListener(myMonitor); frame.add(button1, BorderLayout.NORTH); frame.add(button2, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } static class MyMonitor implements ActionListener { @Override public void actionPerformed(ActionEvent e){ System.out.println("按钮被点击了"+e.getActionCommand()); } } }
import javax.swing.*; // Swing组件(Frame/Button等) import java.awt.*; // AWT基础类(BorderLayout等) import java.awt.event.*; // 事件处理相关(ActionEvent/ActionListener)

输入框TextField监听

package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestText01 { public static void main(String[] args) { //启动! new MyFrame(); } } class MyFrame extends Frame { public MyFrame() { TextField textField = new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener2 myActionListener2 = new MyActionListener2(); //按下enter 就会触发这个输入框的事件 textField.addActionListener(myActionListener2); //设置替换编码 textField.setEchoChar('*'); setVisible(true); pack();//自适应 } } class MyActionListener2 implements ActionListener { @Override public void actionPerformed(ActionEvent e){ TextField field = (TextField) e.getSource();//获得一些资源,返回的一个对象 System.out.println(field.getText());//获得输入框的文本 field.setText("");//null "" } }

简易计算器,组合+内部类回顾复习!

oop原则里:组合,大于继承!

package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator(); } } //计算机类 class Calculator extends Frame { public Calculator() { //3个文本框 TextField num1 = new TextField(10);//字符数 TextField num2 = new TextField(10);//字符数 TextField num3 = new TextField(20);//字符数 //1个按钮 Button button = new Button("="); button.addActionListener(new MyCalculatorListenter(num1,num2,num3)); //1个标签 Label label = new Label("+"); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } } //监听器类 class MyCalculatorListenter implements ActionListener { //获取三个变量 private TextField num1, num2, num3; public MyCalculatorListenter(TextField num1,TextField num2,TextField num3) { this.num1 = num1; this.num2 = num2; this.num3 = num3; } @Override public void actionPerformed(ActionEvent e){ //1.获得加数和被加数 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); //2.将这个值进行加法运算后放到第三个框 num3.setText(""+(n1+n2)); //3.清除前两个框 num1.setText(""); num2.setText(""); } }

完全改造为面向对象

package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算机类 class Calculator extends Frame { //属性 TextField num1, num2,num3; //方法 public void loadFrame(){ num1 = new TextField(10);//字符数 num2 = new TextField(10);//字符数 num3 = new TextField(20);//字符数 Button button = new Button("="); Label label = new Label("+"); button.addActionListener(new MyCalculatorListener(this)); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } public Calculator() { } } //监听器类 class MyCalculatorListenter implements ActionListener { //获取计算机这个对象,在一个类中组合另外一个类 Calculator calculator = null; public MyCalculatorListener(Calculator calculator ) { this.calculator = calculator; } @Override public void actionPerformed(ActionEvent e) { // 1.获得加数和被加数 // 2.将这个值进行加法运算后放到第三个框 // 3.清除前两个框 int n1 = Integer.parseInt(calculator.num1.getText()); int n2 = Integer.parseInt(calculator.num2.getText()); calculator.num3.setText(""+(n1+n2)); calculator.num1.setText(""); calculator.num2.setText(""); } }

内部类:更好的包装

package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算机类 class Calculator extends Frame { //属性 TextField num1, num2, num3; //方法 public void loadFrame() { num1 = new TextField(10);//字符数 num2 = new TextField(10);//字符数 num3 = new TextField(20);//字符数 Button button = new Button("="); Label label = new Label("+"); button.addActionListener(new MyCalculatorListener()); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } //监听器类 //内部类最大的好处,就是可以畅通无阻的访问外部的属性和方法! private class MyCalculatorListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // 1.获得加数和被加数 // 2.将这个值进行加法运算后放到第三个框 // 3.清除前两个框 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText("" + (n1 + n2)); num1.setText(""); num2.setText(""); } } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询