事件监听
鼠标监听事件 模拟画图工具
目的:
实现鼠标画画(只实现简单的点击)
实现效果:
代码:
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);
}
}
实现效果:
标签:java,鼠标,GUI,void,import,new,public From: https://blog.csdn.net/wozhaonue_w/article/details/141749034