package src.com.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();
//因为,addActionListener()需要一个ActionListener,所以我们需要构造一个ActionListener(监听器)
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
windowClose(frame);
frame.add(button,BorderLayout.CENTER); //在窗口上添加按钮,布局为东西南北中的中布局
frame.pack(); //创建容器
frame.setVisible(true); //设置可见性
frame.setBounds(300,300,400,500);
}
private static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener implements ActionListener{
int i;
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("用户点击了按钮"+(++i)+"次");
}
}
结果图
package src.com.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionTow {
public static void main(String[] args) {
//两个按钮,实现同一个监听
//开始 停止
Frame frame = new Frame("测试开始与结束");
frame.setBounds(200,300,200,300);
Button button1 = new Button("start");
Button button2 = new Button("stop");
//可以显示的定义触发会返回的命令,如果不显示定义,则会走默认的值!
//可以多个按钮只写一个监听类!
button1.setActionCommand("start");
button2.setActionCommand("stop");
MyMonitor myMonitor = new MyMonitor();
button1.addActionListener(myMonitor);
button2.addActionListener(myMonitor);
frame.add(button1,BorderLayout.WEST);
frame.add(button2,BorderLayout.EAST);
frame.setVisible(true); //可见性
frame.pack(); //适应大小
}
}
class MyMonitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//e.getActionCommand() 获得按钮的信息
System.out.println("按钮被点击了:msg--->"+e.getActionCommand());
if (e.getActionCommand().equals("stop")){
System.exit(0);
}
}
}
结果图
总结:图中结合了先前所学习到的事件监听,当用户点击的时候,则控制台输出总共点击了多少次
package src.com.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 TestText01 {
public static void main(String[] args) {
//启动!
MyFram myFram = new MyFram();
}
}
class MyFram extends Frame{
public MyFram(){
//创建文本输入框
TextField textField = new TextField();
add(textField);
//监听这个文本框输入的文字
MyActionListener2 myActionListener2 = new MyActionListener2();
//按下enter 就会触发这个输入框的事件
textField.addActionListener(myActionListener2);
//设置替换编码
textField.setEchoChar('*');
//关闭窗口
windowClose(this);
setVisible(true); //可见性
pack(); //自适应
setBounds(200,200,300,300);
}
public static void windowClose(MyFram myFram){
myFram.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField field = (TextField) e.getSource(); //获得一些资源,返回的一个对象
System.out.println(field.getText()); //获得输入框的中文
field.setText(""); //回车后为空
}
}
结果图
总结:在使用TextField文本框输出时,前台可以设置展示的信息为固定字符,然后后台可以看到用户输入的准确信息!
package src.com.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//测试简易计算器 3.1 不太规范的简易计算器
public class TestCalc {
public static void main(String[] args) {
new Calculator();
}
}
//计算器类
class Calculator extends Frame{
//构造器
public Calculator(){
super("3.1 不太规范的简易计算器");
//3个文本框
TextField num1 = new TextField(8); //字符数
TextField num2 = new TextField(8); //字符数
TextField num3 = new TextField(16); //字符数
//1个按钮
Button button = new Button("=");
button.addActionListener(new MyCalculatorListener(num1,num2,num3));
//1个标签
Label label = new Label("+");
//布局
setLayout(new FlowLayout()); //流式布局
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack(); //自动适应窗口
setVisible(true); //可见性
//关闭窗口
windowClose2(this);
}
public static void windowClose2(Calculator myFram){
myFram.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) {
//1、获得加数和被加数
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//2、将这个值 + 法运算后,放到第三个框
num3.setText(""+(n1+n2));
//3、清除前两个框
num1.setText("");
num2.setText("");
}
}
package src.com.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//测试简易计算器 3.2 完全改造为面向对象写法
public class TestCalcTow {
public static void main(String[] args) {
new Cortical().LoadFrame();
}
}
//窗口计算器类
class Cortical extends Frame{
//属性
TextField num1,num2,num3;
//方法
public void LoadFrame(){
//1、三个文本框
num1 = new TextField(8);
num2 = new TextField(8);
num3 = new TextField(18);
//2、一个按钮
Button button = new Button("=");
button.addActionListener(new MyCalculatorTow(this));
//3、一个标签
Label label = new Label("+");
//设置布局
add(num1);
add(label);
add(num2);
add(button);
add(num3);
setLayout(new FlowLayout()); //流式布局
pack(); //自适应窗口
setVisible(true); //透明度
StopTow(this); //关闭窗口
}
//关闭窗口的方法
public static void StopTow (Cortical Myframe ){
Myframe.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyCalculatorTow implements ActionListener{
Cortical cortical = null;
//构造器
public MyCalculatorTow(Cortical cortical) {
this.cortical = cortical;
}
//计算类
@Override
public void actionPerformed(ActionEvent e) {
//1、获得加数和被加数
int n1 = Integer.parseInt(cortical.num1.getText());
int n2 = Integer.parseInt(cortical.num2.getText());
//2、将这个值 + 法运算后,放到第三个框
cortical.num3.setText(""+(n1+n2));
//3、清除这两个数
cortical.num1.setText("");
cortical.num2.setText("");
}
}
package src.com.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//测试简易计算器 3.3 内部类写法:更好的包装
public class TestCalcThree {
public static void main(String[] args) {
new CorticalThree().LoadFrameThree();
}
}
//计算器类
class CorticalThree extends Frame{
//变量
TextField num1,num2,num3;
public void LoadFrameThree(){
//1、设置3个文本框
num1 = new TextField(8);
num2 = new TextField(8);
num3 = new TextField(16);
//2、设置1个标签
Label label = new Label("+");
//3、设置1个按钮
//按钮需要添加事件
Button button = new Button("=");
button.addActionListener(new MyCalculatorThree());
//4、页面布局
add(num1);
add(label);
add(num2);
add(button);
add(num3);
setLayout(new FlowLayout()); //流式布局
pack(); //自适应窗口
setVisible(true); //透明度
StopThree(this); //关闭窗口
}
//监听器类 内部类
//内部类最大的好处,就是可以畅通无阻的访问外部的属性和方法!
private class MyCalculatorThree implements ActionListener{
@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("");
}
}
//关闭窗口的方法
public static void StopThree (CorticalThree Myframe ){
Myframe.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
结果图
package src.com.lesson03;
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); //可见性
}
@Override
public void paint(Graphics g) {
//1、画笔,需要有颜色,画笔可以画画
g.setColor(Color.red);
// g.drawOval(100,100,100,100); //一个圆圈
g.fillOval(100,100,100,100); //实心圆圈
g.setColor(Color.GREEN);
g.fillRect(150,200,100,100); //实心矩形
//养成习惯,画笔用完,将它还原到最初的颜色
}
}
结果图
package src.com.lesson03;
//鼠标监听事件
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMoyseListener {
public static void main(String[] args) {
new MyFrame("画图工具");
}
}
//自己的类
class MyFrame extends Frame{
//画画需要画笔没需要监听鼠标当前的位置,需要集合来存储这个点
ArrayList points;
public MyFrame(String title){
super(title);
setBounds(200,200,400,300);
//存鼠标的点
points = new ArrayList<>();
//设置可见性
setVisible(true);
//鼠标监听器,正对这个窗口
this.addMouseListener(new MyMouseListener());
}
//添加一个点到界面上 过度类
public void addPaint(Point point){
points.add(point);
}
//适配器模式
private class MyMouseListener extends MouseAdapter{
//鼠标 按下,弹起,按住不放
@Override
public void mousePressed(MouseEvent e) {
MyFrame myFrame = (MyFrame) e.getSource();
//这里点击的时候就会在界面上产生一个点 ! 画
//这个点就是鼠标的点
myFrame.addPaint(new Point(e.getX(),e.getY()) );
//每次点击鼠标都需要重画一次
myFrame.repaint(); //刷新
}
}
//鼠标监听事件类
@Override
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); //设置出现的位置
}
}
}
结果图
package src.com.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,400,200);
setVisible(true);
addWindowListener(
//匿名内部类
new WindowAdapter() {
//关闭窗口
@Override
public void windowClosing(WindowEvent e) {
System.out.println("点击了关闭窗口");
System.exit(0);
}
//激活窗口 windowsActivated
@Override
public void windowActivated(WindowEvent e) {
WindowFrame source = (WindowFrame) e.getSource(); //获取资源后强转类型
source.setTitle("被激活啦!"); //设置窗口当前的状态
System.out.println("点击了当前窗口!");
}
//窗口停用 windowsDeactivated
@Override
public void windowDeactivated(WindowEvent e) {
WindowFrame source = (WindowFrame) e.getSource();//获取资源后强转类型
source.setTitle("鼠标你去哪儿啦!快回来!"); //设置窗口当前的状态
System.out.println("离开了当前窗口!");
}
});
}
}
结果图
package src.com.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(1,2,300,400);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
//键盘按下
@Override
public void keyPressed(KeyEvent e) {
//获得键盘按下的键是哪一个,当前的码
int keyCode = e.getKeyCode(); //不需要记录这个数值,直接使用静态属性 VK_XXX
System.out.println(keyCode);
if (keyCode== KeyEvent.VK_UP){ //上键VK_XXX
System.out.println("您按下了上键");
}
}
});
}
}
结果图
总结:以上内容就是整个监听事件的重点了,虽然学习的过程所学的知识都有点杂乱,但是也更多的通过代码的方式去练习以及深入的理解,有些单词还是不需要去死记,而是通过肌肉记忆去记住就好了。
注:文章仅做个人学习日记,不做学习建议,学习来源:狂神说