ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaGUI 05 事件监听&&解决中文乱码

2021-07-12 11:02:50  阅读:172  来源: 互联网

标签:05 frame JavaGUI public 乱码 事件 按钮 new 监听


3.1 事件监听


3.1.1 理解与学习

我们会监听当某个事情发生的时候,我们需要干什么。这就是 "事件监听"

  • 关闭窗体(事件监听)

之前我们就写过 关闭窗体的事件监听,它的格式是什么来着?

frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });

是通过 我们创建的 frame 这个对象,调用了 一个 添加窗口侦听器(addWindowListener) 这个方法来进行的,这个方法有一个参数就是接收 一个 侦听器对象! 而这个对象,具有很多方法,这些方法,又称为 “事件”


上述创建对象和待监听事件(写方法)的形式 是 :匿名内部类。(这种 方式我们不建议写,但不能不知道和不会这样写。我们通过 推荐 开发者写一个 子类 implements 侦听的接口,然后用这个 子类 去创建 侦听器对象!
在这里插入图片描述

  • 每个组件和容器 都有事件

每个组件和容器,都是有事件存在的!就连最简单的按钮,都是具有 点击 事件的。而 它们 添加事件的方法 和 关闭窗体的那个大同小异!

比如:按钮点击 事件的格式是

button.addActionListener(按钮的侦听器);

每个组件和容器 的侦听器也可能不一样,这个 侦听器的类型,需要 看 该 组件和容器的 添加事件 方法叫什么名字,通常 它们是非常相似的。

package com.muquanyu.leeson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestActionEvent {
    public static void main(String[] args) {
        //比如按下按钮,触发一些事件

        Frame frame = new Frame();
        Button button = new Button("请点击一下哟 ~");
        MyActionListener m = new MyActionListener();
        button.addActionListener(m);
        frame.add(button);

        frame.setVisible(true);
    }
}

class MyActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮已被点击!");
    }
}

在这里插入图片描述
该事件 被触发。但却存在着 中文乱码问题!!!


3.1.2 AWT窗体中文乱码的解决

  1. Setting --> Build… --> Comiler --> Shared build process VM options
    在这里插入图片描述
  2. 搜索 File Encodings 将其全部设定为 UTF-8
    在这里插入图片描述

但是最后 我还是没有发现编码 正常! 证明 AWT 一直对 中文着 不友好的 Bug。


3.1.3 两个按钮同监听

实现 Start 和 Stop 两个按钮的 监听,但只用 一个监听里面的事件 就可以完成!

package com.muquanyu.leeson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class StartAndEnd {
    public static void main(String[] args) {
        Frame frame = new Frame();

        Button start = new Button("Start");
        Button stop = new Button("Stop");
        start.setActionCommand("Start");
        stop.setActionCommand("Stop");

        frame.setLayout(new FlowLayout());
        frame.add(start);
        frame.add(stop);

        StartAndStop sas = new StartAndStop();

        start.addActionListener(sas);
        stop.addActionListener(sas);

        frame.setVisible(true);
    }
}
class StartAndStop implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand() == "Stop")
        {
            System.out.println("停止按钮被点击!");
        }else{
            System.out.println("开始按钮被点击!");
        }
    }
}

setActionCommand() 就是在事件被触发后,返回一个 特有的 命令码。(相当于 令牌 Key)来告诉 我们,当前 触发事件的这个组件或容器 是什么!!

那么我们就可以 根据 返回的 Command 来进行一个判断,虽然都是同一个事件,但是每次触发的时候,都会返回 不一样的 Command,也就代表着,不同的按钮,在触发着一个事件!这就叫做 同监听(这种方式 可以 提高效率,不浪费内存。)。

标签:05,frame,JavaGUI,public,乱码,事件,按钮,new,监听
来源: https://blog.csdn.net/qq_52606908/article/details/118668610

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有