【Java GUI 编程】AWT 画笔,鼠标监听,键盘监听,窗口监听

本文介绍了Java AWT库在GUI编程中的应用,包括使用画笔进行图形绘制,实现鼠标监听以响应点击事件进行画画操作,窗口监听以优化程序交互,以及键盘监听来响应按键动作,为后续的游戏开发等场景打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回顾 : AWT

抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,比如之前总结的容器,组件,布局管理器,事件的监听等等,是Java提供的用来建立和设置Java的图形用户界面的基本工具

GUI 画笔

基础 Frame 类,需要重写的方法是 paint

package JavaGUI;
import java.awt.*;

/**
 * @Title:
 * @Package
 * @Description:
 * @author: maze
 * @date 2020/10/18下午 19:00
 */
public class Test11Paint {
    public static void main(String[] args) {
        new MyPaint().loarFrame();
    }
}

class MyPaint extends Frame {
    public void loarFrame(){
        setBounds(200,200,600,600);
        setVisible(true);
    }
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillOval(100,100,100,100);
        g.drawOval(200,200,100,100);
        g.fillRect(300,300,100,100);
    }
}

在这里插入图片描述

鼠标监听

需求:实现鼠标监听事件画画

在这里插入图片描述

package JavaGUI;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Array;
import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Title: MouseListener
 * @Package JavaGUI
 * @Description:
 * @author: maze
 * @date 2020/10/18下午 21:48
 */
public class Test12MouseListener {
    public static void main(String[] args) {
        new MyFrame3("画笔");
    }
}

class MyFrame3 extends Frame {

    ArrayList points;// 鼠标的位置
    MyFrame3(String title){
        super(title);
        setBounds(100,100,400,400);
        // 鼠标点击的点
        points = new ArrayList<>();
        // 鼠标监听事件
        setVisible(true);
        this.addMouseListener(new MyMouseListener());
    }

    @Override
    public void paint(Graphics g) {
        // 鼠标要监听的时间
        Iterator iterator = points.iterator();
        while(iterator.hasNext()){
            Point point = (Point) iterator.next();
            g.setColor(Color.cyan);
            g.fillOval(point.x,point.y,10,10);
        }
    }
    // 添加一个点到界面上
    public void addPaint(Point point){
        points.add(point);
    }

    // 适配器
    private class MyMouseListener extends MouseAdapter{
        @Override
        public void mousePressed(MouseEvent e) {
            MyFrame3 myFrame = (MyFrame3) e.getSource();
            // 这里点击的时候就会在界面上产生一个点
            myFrame.addPaint(new Point(e.getX(),e.getY()));
            // 每次点击鼠标,让它重新画一遍
            myFrame.repaint(); //刷新页面
        }
    }
}

运行点击鼠标后,如下图

在这里插入图片描述

窗口监听

package JavaGUI;

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

/**
 * @Title: TestWindow
 * @Package JavaGUI
 * @Description:
 * @author: maze
 * @date 2020/10/18下午 23:18
 */
public class TestWindow {
    public static void main(String[] args) {
        new WindowFrame();
    }
}

class WindowFrame extends Frame {
    public WindowFrame(){
        setBackground(Color.yellow);
        setBounds(100,100,200,200);
        setVisible(true);
        addWindowListener(new MyWindowListener());
    }
    class MyWindowListener extends WindowAdapter{
        @Override
        public void windowClosing(WindowEvent e) {
            setVisible(false); //通过按钮隐藏窗口
            System.exit(0); //正常退出
        }
    }
}

增加内部类优化

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

class WindowFrame extends Frame {
    public WindowFrame(){
        setBackground(Color.yellow);
        setBounds(100,100,200,200);
        setVisible(true);
        //addWindowListener(new MyWindowListener());
        this.addWindowListener(new WindowAdapter() {
            // 打开窗口
            @Override
            public void windowClosing(WindowEvent e) {
                setVisible(false); //通过按钮隐藏窗口
                System.exit(0); //正常退出
            }
            // 激活窗口
            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("Window Activated");
            }
        });
    }
}

键盘监听

监听键盘事件,当我们键盘按下一个键的时候,都是一个事件

package JavaGUI;

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

/**
 * @Title: Test13KeyListener
 * @Package JavaGUI
 * @Description:
 * @author: maze
 * @date 2020/10/19下午 23:12
 */
public class Test13KeyListener {
    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();
                if(keyCode == KeyEvent.VK_UP){
                    System.out.println("你按下了上键!");
                }
                if(keyCode == KeyEvent.VK_DOWN){
                    System.out.println("你按下了下键!");
                }
                if(keyCode == KeyEvent.VK_LEFT){
                    System.out.println("你按下了左键!");
                }
                if(keyCode == KeyEvent.VK_RIGHT){
                    System.out.println("你按下了右键!");
                }
            }
        });
    }
}

这个是一个重点,因为后期写游戏的时候,键盘会有按键,会执行做一些动作!

下一篇博客总结的是 GUI 编程另一个技术 : Swing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值