JavaGUI 09 窗口监听&&键盘监听

本文详细介绍了如何在Java中实现窗口监听,包括窗口打开、关闭、最小化、最大化等状态的变化,以及使用KeyListener处理键盘事件,如按键按下、释放和连续按键。通过实例代码演示了关键技术的使用和应用场景。
摘要由CSDN通过智能技术生成

4.2 窗口监听&&键盘监听


4.2.1 窗口监听

package com.muquanyu.lesson03;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class TestWindow {
    public static void main(String[] args) {
        WindowFrame w = new WindowFrame();
    }
}

class WindowFrame extends Frame{
    public WindowFrame()
    {
        setVisible(true);
        addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("窗口已打开");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("窗口已关闭");
                this.windowClosed(e);


            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("当窗口被关闭的时候,做一些事");
            }

            @Override
            public void windowIconified(WindowEvent e) {
                System.out.println("窗口图标化,就是托盘图标,最小化了就属于图标化了");
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                System.out.println("取消最小化");
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("窗口再次获取焦点");
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                System.out.println("窗口失去焦点");

            }
        });
    }

    class MyWindowListenter extends WindowAdapter {

        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e);
            System.exit(0);//正常退出
            System.exit(1);//非正常退出
            setVisible(false);//隐藏窗口,通过按钮
        }
    }

}

TM ~ 的 没啥好说的,就是 看你单词会多少。这东西都能看懂。在源码里呢,自己看吧。

public void windowClosed(WindowEvent e) 一般不会被调用,而是调用 Closing。
在这里插入图片描述在这里插入图片描述


4.2.2 键盘监听

键盘监听事件极其的少,就三个!哈哈 ~ ~

package com.muquanyu.lesson03;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class TestKeyLisener {
    public static void main(String[] args) {
        KeyFrame k = new KeyFrame();
    }
}

class KeyFrame extends Frame{
    public KeyFrame()
    {
        setBounds(1,2,300,400);
        setVisible(true);
        this.addKeyListener(new KeyListener() {
            @Override
            //键入一个键位,意思是指 一直按着一个键位 不放手的 触发事件。
            //可能会 不识别 一些 功能键!
            public void keyTyped(KeyEvent e) {

                System.out.println("你正在一直按着:" + e.getKeyChar());

            }

            @Override
            public void keyPressed(KeyEvent e) {

                //键盘按下 触发的事件
                //那我们肯定要获取 是哪个 键位
                //e.getKeyCode();//获取的这个码 是 整数的ASCII码

                int keyCode = e.getKeyCode();
                if(keyCode == KeyEvent.VK_UP)
                {
                    System.out.println("你按下了上键");
                }

            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("松开了。");
            }
        });
    }
}

getKeyCode() 获取当前按下的 键位值,返回的是 一个 十进制的整数ASCII码。
KeyEvent.VK_UP 是一个 十六进制的整数常量,意思是 上方向键的 十六进制 ASCII 码。
两者 进行对比,如果 我按下了 上方向键,那么它就会提示我按下了。
keyReleased() 事件,是 松开某键位 的事件。
keyTyped() 检测键入的 键位,就是指一直按着的 键!但是它不会检测 功能键,功能键按下后,是不会被触发的!

其实我们用 getKeyChar() 是直接可以获取 你按下的键位 名称的,也就是字符。我们可以根据字符来进行对比。只不过 有时候,你输入的 对比字符,可能不对。所以保险起见,采用 getKeyCode()。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 Java 8 中实现不使用 GUI 的方式监听鼠标或键盘事件,可以使用 Java 提供的一些底层库,如 JNativeHook 或 JInput。 JNativeHook 是一个开源的 Java 库,可以用于监听全局的键盘和鼠标事件。它可以在不需要图形界面的情况下运行,并提供了跨平台的支持。 首先,你需要下载 JNativeHook 库,并将其添加到你的项目中。然后,你可以使用以下代码来监听键盘事件: ```java import org.jnativehook.GlobalScreen; import org.jnativehook.NativeHookException; import org.jnativehook.keyboard.NativeKeyEvent; import org.jnativehook.keyboard.NativeKeyListener; public class KeyboardListener { public static void main(String[] args) { try { // 初始化 NativeHook GlobalScreen.registerNativeHook(); // 添加键盘事件监听器 GlobalScreen.addNativeKeyListener(new NativeKeyListener() { @Override public void nativeKeyPressed(NativeKeyEvent e) { // 处理按键按下事件 System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); } @Override public void nativeKeyReleased(NativeKeyEvent e) { // 处理按键释放事件 System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode())); } @Override public void nativeKeyTyped(NativeKeyEvent e) { // 处理按键类型事件 } }); } catch (NativeHookException e) { e.printStackTrace(); } } } ``` 上述代码会监听全局的键盘事件,并在控制台输出按键的信息。 对于鼠标事件的监听,你可以使用 JNativeHook 的鼠标事件监听器 `NativeMouseListener` 和 `NativeMouseMotionListener`。 请注意,在使用 JNativeHook 时,你需要在程序结束时调用 `GlobalScreen.unregisterNativeHook()` 来释放资源。 另外,如果你想监听键盘或鼠标事件的特定应用程序窗口,而不是全局的事件,可以考虑使用其他库或技术,如 JNA(Java Native Access)或操作系统提供的 API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值