GUI-3

4 篇文章 0 订阅

事件监听

鼠标监听事件 模拟画图工具

目的

实现鼠标画画(只实现简单的点击)

实现效果

在这里插入图片描述

代码

package com.bao.lesson6;

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("画图");

    }
}
//自己的类
class MyFrame extends Frame {
    //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
    //属性
    ArrayList points;

    public MyFrame(String title)  {
        super(title);
        setBounds(200,200,800,500);

        //存鼠标点击的点
        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.BLUE);
          g.fillOval(point.x,point.y,10,10);
        }
    }
    //添加一个点到我们的界面上去


//适配器模式
    private class MyMouseListener extends MouseAdapter {
        //鼠标 按下,弹起,按住不放


    @Override
    public void mousePressed(MouseEvent e) {
        //谁调用,获取的资源对象就是谁
        MyFrame myFrame = (MyFrame) e.getSource();
        //这里我们点击的时候,就会在界面上产生一个点!
        //这个点就是鼠标的点
       points.add(new Point(e.getX(),e.getY()));

        //每次点击鼠标都需要重新画一遍
        myFrame.repaint(); //刷新 30帧 60帧
    }
}
}


[!IMPORTANT]

这个鼠标点击实现画画的总结

  • 首先,面板中要有画笔,有收集鼠标点击的点的集合,监听鼠标点击事件的监听器
  • 通过监听器来获取鼠标点击的点的坐标,传给集合
  • 集合通过迭代器来实现每个点的遍历
  • 在点的遍历的过程中,在这个点用画笔画一个小的实心圆,也就是我们看到的点
  • 我们最后需要使面板在鼠标每点击一次重新绘画,以实现绘画方法的多次实现

当我们new一个面板时,系统会自动调用画笔的方法,导致无法获取到鼠标点的信息,画笔就结束了,所以需要再写一个repaint()方法使得绘画方法再次调用

窗口监听

package com.bao.lesson7;

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

public class TestWindowListener {
    public static void main(String[] args) {
        new MyWindowFrame("未激活");
    }
}
class MyWindowFrame extends Frame {
    public MyWindowFrame(String title) {
        super(title);
        setVisible(true);
        setBackground(Color.BLACK);
        setBounds(100, 100, 500, 500);


        //使用了匿名内部类
        this.addWindowListener(new WindowAdapter() {
            //关闭窗口
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("closing");
                setVisible(false);
                System.exit(0);
            }
            //激活窗口
            @Override
            public void windowActivated(WindowEvent e) {
                MyWindowFrame source = (MyWindowFrame) e.getSource();
                source.setTitle("被激活了");
            }

            //其他的窗口监听事件不常用
        });
    }
}

隐藏窗口后显示窗口,窗口标题变为”被激活了“

在这里插入图片描述

关闭窗口后控制台输出”closing“

在这里插入图片描述

键盘监听

实现效果

按下哪个键就在控制台输出对应键编码,若按下上键,则输出”你按下了上键“

package com.bao.lesson8;

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

public class TestKeyListener {
    public static void main(String[] args) {
        new MyKeyFrame();
    }
}
class MyKeyFrame extends Frame {
    public MyKeyFrame() {
        setVisible(true);
        setBackground(Color.BLUE);
        setBounds(100,100,500,500);

        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("你按下了上键");
                }

            }
        });
    }
}

在这里插入图片描述

Swing

JFrame 窗体

继承于Frame,更加高级,关闭窗口事件封装为了一个方法

package com.bao.lesson9;

import javax.swing.*;
import java.awt.*;

public class JFrameDemo {
    public void init(){
        //顶级窗口
        JFrame jFrame = new JFrame("go");
        jFrame.setVisible(true);
        jFrame.setBounds(100,100,200,200);

        //设置文字
        JLabel label = new JLabel("欢迎来到英雄联盟");
        jFrame.add(label);

        //容器实例化 获得一个容器,它才是它真正的颜色
        Container contentPane = jFrame.getContentPane();
        contentPane.setBackground(Color.BLUE);



        //关闭事件
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JFrameDemo().init();
    }
}

要实现容器实例化才可以增加组件以及设置背景色

Dialog 弹窗

package com.bao.lesson9;

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

public class TestDialog extends JFrame {
    public TestDialog() {
        this.setVisible(true);
        this.setSize(700, 500);

        //JFrame放东西
        Container contentPane = this.getContentPane();
        //绝对定位,通过x,y
        contentPane.setLayout(null);

        //按钮
        Button button = new Button("点击弹出对话框");
        button.setBounds(30,30,200,50);

        //点击这个按钮的时候,弹出一个弹窗
        contentPane.add(button);
        //监听事件
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //弹窗
            new MyDialog();
            }
        });



        //关闭事件
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public void init(){

    }

    public static void main(String[] args) {
            new TestDialog();
    }
}



//弹窗窗口
class MyDialog extends JDialog {
    public MyDialog() {
        this.setVisible(true);
        this.setBounds(100,100,500,500);
//        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         //弹窗中默认已经有关闭事件了,所以不用额外添加
        Container contentPane = this.getContentPane();
        contentPane.setLayout(null);
        JLabel jLabel = new JLabel("hello");
        jLabel.setBounds(100,100,50,50);
        contentPane.add(jLabel);
    }
}

实现效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值