GUI编程 --2
2.4 事件监听
按钮的使用。
| package com.ssl.lesson02; |
| |
| 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 TestActionEvent { |
| public static void main(String[] args) { |
| |
| Frame frame =new Frame(); |
| Button button = new Button(); |
| |
| |
| MyActionListener myActionListener = new MyActionListener(); |
| button.addActionListener(myActionListener); |
| |
| frame.add(button); |
| |
| frame.setVisible(true); |
| |
| frame.setSize(400,400); |
| |
| windowsClose(frame); |
| } |
| |
| |
| private static void windowsClose(Frame frame){ |
| frame.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| } |
| |
| class MyActionListener implements ActionListener{ |
| |
| private static int a = 0 ; |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| |
| System.out.println(++a); |
| } |
| } |
两个按钮绑定一个监听
| package com.ssl.lesson02; |
| |
| 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 TestActionTwo { |
| public static void main(String[] args) { |
| |
| |
| Frame frame = new Frame("开始-停止"); |
| Button button1 =new Button("start"); |
| Button button2 =new Button("stop"); |
| |
| |
| frame.add(button1,BorderLayout.NORTH); |
| frame.add(button2,BorderLayout.SOUTH); |
| |
| |
| button2.setActionCommand("Button2-stop"); |
| |
| button1.addActionListener(new MyMonitor()); |
| button2.addActionListener(new MyMonitor()); |
| |
| frame.setSize(500,500); |
| |
| |
| frame.setVisible(true); |
| |
| windowsClose(frame); |
| |
| } |
| |
| |
| private static void windowsClose(Frame frame){ |
| frame.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| } |
| |
| class MyMonitor implements ActionListener { |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| |
| System.out.println("按钮被点击了!"+e.getActionCommand()); |
| |
| } |
| } |
2.5输入框TextField 监听
| package com.ssl.lesson02; |
| |
| 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 TextText01 { |
| public static void main(String[] args) { |
| |
| MyFrame frame = new MyFrame(); |
| |
| frame.setSize(400,400); |
| |
| WindowsCloser(frame); |
| } |
| |
| public static void WindowsCloser(MyFrame frame){ |
| frame.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| |
| } |
| |
| class MyFrame extends Frame{ |
| public MyFrame(){ |
| TextField textField = new TextField(); |
| add(textField); |
| |
| |
| |
| textField.addActionListener(new 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()); |
| |
| } |
| |
| } |
2.6简易计算器,组合+内部类
OOP原则中,组合大于继承。
| |
| class A extend B{ |
| |
| } |
| |
| |
| class A{ |
| public B b; |
| } |
| |
计算器
| |
| package com.ssl.lesson02; |
| |
| import javax.crypto.interfaces.PBEKey; |
| import javax.swing.*; |
| import javax.xml.soap.Text; |
| 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 TestCalc { |
| public static void main(String[] args) { |
| new Calculator(); |
| } |
| } |
| |
| |
| class Calculator extends Frame{ |
| public Calculator(){ |
| setTitle("Calculator"); |
| |
| TextField textField1 = new TextField(10); |
| TextField textField2 = new TextField(10); |
| TextField textField3 = new TextField(20); |
| |
| Button button = new Button("="); |
| button.addActionListener(new MyCalculatorListener(textField1,textField2,textField3)); |
| |
| |
| Label label = new Label("+"); |
| |
| |
| setLayout(new FlowLayout()); |
| |
| |
| add(textField1); |
| add(label); |
| add(textField2); |
| add(button); |
| add(textField3); |
| |
| setVisible(true); |
| |
| setBounds(400,400,600,400); |
| |
| setSize(600,100); |
| |
| widowsCloser(this); |
| } |
| public static void widowsCloser(Calculator calculator){ |
| calculator.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| |
| |
| } |
| |
| |
| |
| |
| |
| class MyCalculatorListener implements ActionListener{ |
| |
| private TextField num1,num2,num3; |
| |
| public MyCalculatorListener(TextField num1,TextField num2,TextField num3){ |
| this.num1=num1; |
| this.num2=num2; |
| this.num3=num3; |
| } |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| |
| |
| |
| |
| |
| |
| |
| int n1 = Integer.parseInt(num1.getText()); |
| int n2 = Integer.parseInt(num2.getText()); |
| |
| num3.setText(" "+(n1+n2)); |
| num1.setText(""); |
| num2.setText(""); |
| |
| } |
| } |
完全改造为面向对象
| package com.ssl.lesson02; |
| |
| import javax.crypto.interfaces.PBEKey; |
| import javax.swing.*; |
| import javax.xml.soap.Text; |
| 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 TestCalc { |
| public static void main(String[] args) { |
| new Calculator(); |
| } |
| } |
| |
| //计算器类 |
| class Calculator extends Frame{ |
| //属性 |
| TextField num1,num2,num3; |
| |
| public Calculator(){ |
| setTitle("Calculator"); |
| //3个文本框 |
| num1 = new TextField(10); |
| num2 = new TextField(10); |
| num3 = new TextField(20); |
| //一个按钮 |
| Button button = new Button("="); |
| button.addActionListener(new MyCalculatorListener(this)); |
| |
| //一个标签 |
| Label label = new Label("+"); |
| |
| //设置布局 |
| setLayout(new FlowLayout()); |
| |
| //加元素 |
| add(num1); |
| add(label); |
| add(num2); |
| add(button); |
| add(num3); |
| |
| setVisible(true); |
| |
| setBounds(400,400,600,400); |
| |
| setSize(600,100); |
| |
| widowsCloser(this); |
| } |
| public static void widowsCloser(Calculator calculator){ |
| calculator.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| |
| |
| } |
| |
| |
| |
| |
| //监听器类 监听输入框 |
| class MyCalculatorListener implements ActionListener{ |
| //获取计算器在这个对象,在一个类中组合另外一个类 |
| Calculator calculator = null; |
| |
| |
| public MyCalculatorListener(Calculator calculator){ |
| this.calculator=calculator; |
| } |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| /** |
| * 1.获得加数和被加数 |
| * 2.将这个值+法运算后,放到第三个框 |
| * 3.清除前两个框 |
| */ |
| |
| //获取前第一个框和第二框,并转为int |
| 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(""); |
| |
| } |
| } |
内部类:
小tip:null 不等于"";
| package com.ssl.lesson02; |
| |
| import javax.crypto.interfaces.PBEKey; |
| import javax.swing.*; |
| import javax.xml.soap.Text; |
| 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 TestCalc { |
| public static void main(String[] args) { |
| new Calculator(); |
| } |
| } |
| |
| |
| class Calculator extends Frame{ |
| |
| TextField num1,num2,num3; |
| |
| public Calculator(){ |
| setTitle("Calculator"); |
| |
| num1 = new TextField(10); |
| num2 = new TextField(10); |
| num3 = new TextField(20); |
| |
| Button button = new Button("="); |
| button.addActionListener(new MyCalculatorListener()); |
| |
| |
| Label label = new Label("+"); |
| |
| |
| setLayout(new FlowLayout()); |
| |
| |
| add(num1); |
| add(label); |
| add(num2); |
| add(button); |
| add(num3); |
| |
| setVisible(true); |
| |
| setBounds(400,400,600,400); |
| |
| setSize(600,100); |
| |
| widowsCloser(this); |
| } |
| public static void widowsCloser(Calculator calculator){ |
| calculator.addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| }); |
| } |
| |
| |
| private class MyCalculatorListener implements ActionListener{ |
| |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| |
| |
| |
| |
| |
| if(((String)num1.getText()).length() == 0 ||"".equals((String)num2.getText()) ){ |
| num1.setText("0"); |
| num2.setText("0"); |
| num3.setText("0"); |
| return ; |
| } |
| |
| |
| |
| int n1 = Integer.parseInt(num1.getText()); |
| int n2 = Integer.parseInt(num2.getText()); |
| |
| |
| |
| num3.setText(" "+(n1+n2)); |
| num1.setText(""); |
| num2.setText(""); |
| |
| } |
| } |
| } |
2.7画笔Paint
| package com.ssl.lesson03; |
| |
| import javafx.beans.binding.SetBinding; |
| |
| import java.awt.*; |
| |
| public class TestPaint { |
| public static void main(String[] args) { |
| new MyPaint().loadFrame(); |
| } |
| } |
| |
| class MyPaint extends Frame{ |
| public void loadFrame(){ |
| setBounds(200,200,600,500); |
| setVisible(true); |
| } |
| |
| |
| public void paint(Graphics g){ |
| |
| |
| g.setColor(Color.red); |
| |
| g.drawOval(100,100,100,100); |
| |
| g.setColor(Color.orange); |
| |
| g.fillOval(200,200,100,100); |
| |
| |
| |
| } |
| } |
2.8 鼠标监听
- 画板 与画笔绑定
- 画笔 读x y
- 鼠标:监听事件 x,y 读完然后repaint();
- 存点的集合:存x y
| package com.ssl.lesson03; |
| |
| import java.awt.*; |
| import java.awt.event.MouseAdapter; |
| import java.awt.event.MouseEvent; |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| |
| public class TestMouseListener { |
| public static void main(String[] args) { |
| new MyFrame("point"); |
| } |
| } |
| |
| |
| class MyFrame extends Frame { |
| |
| ArrayList points; |
| |
| public MyFrame(String title) { |
| super(title); |
| setBounds(200, 200, 400, 300); |
| |
| this.addMouseListener(new MyMouseListener()); |
| |
| points = new ArrayList<>(); |
| |
| setVisible(true); |
| } |
| |
| public void paint(Graphics g) { |
| |
| |
| Iterator iterator = points.iterator(); |
| while (iterator.hasNext()) { |
| Point point = (Point) iterator.next(); |
| g.setColor(Color.BLUE); |
| g.fillOval(point.x, point.y, 10, 10); |
| } |
| } |
| |
| |
| public void addPoint(Point point) { |
| points.add(point); |
| } |
| |
| |
| private class MyMouseListener extends MouseAdapter { |
| |
| @Override |
| public void mousePressed(MouseEvent e) { |
| MyFrame frame = (MyFrame) e.getSource(); |
| |
| frame.addPoint(new Point(e.getX(), e.getY())); |
| |
| |
| |
| frame.repaint(); |
| } |
| } |
| } |
2.9窗口监听
推荐使用匿名内部类
| package com.ssl.lesson03; |
| |
| import java.awt.*; |
| import java.awt.event.WindowAdapter; |
| import java.awt.event.WindowEvent; |
| |
| public class TestWindow { |
| public static void main(String[] args) { |
| new WindowFrame(); |
| } |
| } |
| |
| class WindowFrame extends Frame { |
| public WindowFrame(){ |
| setBackground(Color.BLUE); |
| setBounds(100,100,200,200); |
| |
| setVisible(true); |
| |
| this.addWindowListener( |
| |
| new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.out.println("你点击了关闭"); |
| } |
| } |
| ); |
| |
| } |
| |
| } |
2.10键盘监听
| package com.ssl.lesson03; |
| |
| import java.awt.*; |
| import java.awt.event.KeyAdapter; |
| import java.awt.event.KeyEvent; |
| |
| |
| public class TestKeyListener { |
| public static void main(String[] args) { |
| new KeyFrame(); |
| } |
| } |
| |
| class KeyFrame extends Frame { |
| public KeyFrame() { |
| setBounds(100, 100, 200, 200); |
| setVisible(true); |
| |
| this.addKeyListener(new KeyAdapter() { |
| |
| @Override |
| public void keyPressed(KeyEvent e) { |
| |
| int keyCode = e.getKeyCode(); |
| System.out.println(keyCode); |
| if (keyCode == KeyEvent.VK_UP) { |
| System.out.println("你按下了上键"); |
| } |
| |
| } |
| }); |
| } |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具