GUI中java三种响应方式,鼠标,屏幕,键盘 及其代码示例
1. 鼠标响应
使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将MouseEvent 传递给该方法。
程序实例:
通过鼠标点击,获取鼠标点击的位置,使用画笔在画板上绘制点的操作
原理示意图
实现代码如下:
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Iterator;
public class Mousepaint {
public static void main(String[] args) {
new MyFrame("我的的画板");
}
}
//画板
class MyFrame extends Frame{
//存放点的集合
ArrayList points;
public MyFrame(String title) {
super(title);
setVisible(true);
setBounds(200,200,400,400);
//存放鼠标点击的点
points=new ArrayList<>();
//监听鼠标的动作
this.addMouseListener(new Mymouse());
}
//画板
@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);
}
}
//集合获取鼠标点击的点
public void addPoint(Point point){
points.add(point);
}
//内部类:适配器模式
private class Mymouse extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
MyFrame frame=(MyFrame)e.getSource();
//获取鼠标点击的 X Y坐标
frame.addPoint(new Point(e.getX(),e.getY()));
//每次画完在重画
frame.repaint();//重画
}
}
}
2. 屏幕响应
用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
实现代码
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class WindPaint {
public static void main(String[] args) {
new windowFrame();
}
}
class windowFrame extends Frame{
public windowFrame() {
setVisible(true);
setBackground(Color.lightGray);
setBounds(200,200,400,400);
//addWindowListener(new Windlister());
this.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("windowIconified");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("windowDeiconified");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("windowActivated");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("windowDeactivated");
}
@Override
public void windowStateChanged(WindowEvent e) {
System.out.println("windowStateChanged");
}
@Override
public void windowGainedFocus(WindowEvent e) {
System.out.println("windowGainedFocus");
}
@Override
public void windowLostFocus(WindowEvent e) {
System.out.println("windowLostFocus");
}
});
}
3. 键盘监听
用于接收键盘事件的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 KeyAdapter(仅重写所需的方法)。然后使用窗口的 addKeyListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过对键盘按下、长按等状态,将调用该侦听器对象中的相关方法,并将 KeyEvent 传递给该方法。
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class TestKeylister {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame{
public KeyFrame() {
setBounds(100,100,200,200);
setVisible(true);
setBackground(Color.BLACK);
//匿名内部类:直接调用键盘监听
this.addKeyListener(new KeyAdapter() {
@Override
//重写keyPressed(键盘按下响应)方法
public void keyPressed(KeyEvent e) {
int keycode=e.getKeyCode();
if(keycode==KeyEvent.VK_UP){
System.out.println("你按下了上键");
}
else if (keycode==KeyEvent.VK_DOWN)
{
System.out.println("你按下了下键");
}
else if (keycode==KeyEvent.VK_LEFT)
{
System.out.println("你按下了左键");
}
else if (keycode==KeyEvent.VK_RIGHT)
{
System.out.println("你按下了右键");
}
else System.out.println("你按下了其他键盘");
}
});
}
}