java swing事件_第四节 Java Swing事件处理

第四节:事件处理

一个图形界面完的成只是程序开发中起步的工作,因为要想让每一个组件都发挥其作用,就必须对所有的组件进行事件处理。那么什么是事件处理,所谓事件就表示一个对象发生状态变化。例如,每当按下一个按钮时,实际上按钮的状态就发生了变化,而如果要想处理此事件,就需要监听者不断地进行监听事件的变化,并根据时间进行相应的处理。事件要想被处理,必须使用事件监听器,所有的事件监听器都是以接口的形式出现的,处理时只要实现此接口就行。整个事件处理流程如下图所示:

f45b60a08dc3180ca333dd5e0e3b746d.png

下面通过几个事件来进一步说明事件的处理流程。

窗体事件

WindowsListener是专门处理窗体的事件监听接口,一个窗体的所有变化,如窗体的打开,关闭等都可以使用这个接口进行监听。此接口定义的方法如下:

public void windowOpened(WindowEvent e)//窗口打开时触发

public void windowClosing(WindowEvent e)//窗口正在关闭时触发

public void windowIconified(WindowEvent e)//窗口最小化时触发

public void windowDeiconified(WindowEvent e)//窗口从最小化恢复到正常状态时触发

public void windowActivated(WindowEvent e)//将窗口变为活动窗口时触发

public void windowDeactivated(WindowEvent e)//将窗口变为不活动窗口时触发

建立一个监听器

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

public class MyWindowEventHandle implements WindowListener{

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowOpened-->窗口被打开");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowClosing-->窗口关闭");

}

@Override

public void windowClosed(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowClosed-->窗口被关闭");

System.exit(1);//系统退出

}

@Override

public void windowIconified(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowIconifed-->窗口最小化");

}

@Override

public void windowDeiconified(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowDeiconified-->窗口最小化恢复");

}

@Override

public void windowActivated(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowActivated-->窗口被选中");

}

@Override

public void windowDeactivated(WindowEvent e) {

// TODO Auto-generated method stub

System.out.println("windowDeactivated-->窗口被选中");

}

}

单单只有一个监听器是不够的,还需要在组件上注册监听,这样才可以处理,直接使用窗体的addWindowListener(监听对象)方法即可注册。

import java.awt.Color;

import javax.swing.JFrame;

public class MyWindowEventJFrame01 {

public static void main(String args[]){

JFrame jFrame=new JFrame("Welcome to MichaelLee!");

//将此窗口加入到一个窗口监听器中,这样监听器就可以根据时间进行处理

jFrame.addWindowListener(new MyWindowEventHandle());

jFrame.setSize(400,300);

jFrame.setBackground(Color.black);

jFrame.setLocation(500,300);

jFrame.setVisible(true);

}

}

程序运行结果:

windowActivated-->窗口被选中

windowOpened-->窗口被打开

windowIconifed-->窗口最小化

windowDeactivated-->窗口被选中

windowDeiconified-->窗口最小化恢复

windowActivated-->窗口被选中

windowClosing-->窗口关闭

windowDeactivated-->窗口被选中

程序运行后会显示一个窗体,此时对窗体进行相应的状态变化,则在后台会打印出以上的信息。

监听适配器:

大致了解事件处理的基本流程后,大家可能会有这样一个疑问,如果现在只需对关闭窗口的事件进行监听,其他的操作根本就不关心,那末还有必要覆写那么多的方法吗?能不能只根据个人的需要来进行覆写?答案是肯定的。要想解决这个问题,可以使用Adapter(适配器)类。以WindowAdapter为例,用户只要继承了此类,就可以根据自己的需要覆写方法。比如现在我们只关心关闭窗口和打开窗口。

通过WindowAdapter实现监听

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

public class MyWindowAdapterHandler extends WindowAdapter{

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口被打开!");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosed(e);

System.out.println("窗口关闭!");

}

}

注册事件监听

import java.awt.Color;

import javax.swing.JFrame;

public class MyWindowEventJFrame02 {

public static void main(String args[]){

JFrame jFrame=new JFrame("Welcome to MichaelLee!");

jFrame.addWindowListener(new MyWindowAdapterHandler());

jFrame.setSize(500,400);

jFrame.setLocation(300,400);

jFrame.setBackground(Color.BLUE);

jFrame.setVisible(true);

}

}

程序运行结果:

窗口被打开!

窗口关闭!

此时只监听窗口被打开以及被关闭事件,但是这样一来又会出现一个新的问题,如果此监听处理只需操作一次,那末就没必要将其设置成一个单独的类,此时就可以利用匿名内部类来完成。

使用匿名内部类:

import java.awt.Color;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.JFrame;

public class MyWindowEventJframe03 {

public static void main(String args[]){

JFrame jFrame=new JFrame("Welcome to MichaelLee!");

//此时直接使用WindowAdapter的子类完成监听的处理

jFrame.addWindowListener(new WindowAdapter() {

//覆写窗口的关闭方法

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口被打开!");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosed(e);

System.out.println("窗口关闭!");

}

});

jFrame.setSize(500,400);

jFrame.setLocation(300,400);

jFrame.setBackground(Color.BLUE);

jFrame.setVisible(true);

}

}

效果与上面的一样,可以看出直接编写匿名内部类可以减少监听类的定义,这在开发中是较为常见的一种做法。

动作事件及监听处理:

要想让一个按钮变得有意义,就必须使用事件处理。在Swing事件处理中可以使用ActionListener接口处理按钮的动作事件,ActionListener接口只定义了一个方法

Void actiongPerformed(ActionEvent e)//发生操作时调用

是用以上接口监听按钮的单击事件

import java.awt.Color;

import java.awt.Font;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

class ActionHandler{

private JFrame jframe=new JFrame("Welcome to MichaelLee!");

private JButton btn=new JButton("显示");

private JLabel  lab=new JLabel();

private JTextField text=new JTextField(10);//定义一个文本域

private JPanel pan=new JPanel();//定义一个版面

public ActionHandler(){

Font font=new Font("Serif",Font.ITALIC+Font.BOLD,28);

lab.setFont(font);

lab.setText("等待用户输入!");

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==btn){//判断触发源是否是按钮

lab.setText(text.getText());//将文本文字设置到标签

}

}

});

//此时直接使用WindowAdapter的子类完成监听的处理

jframe.addWindowListener(new WindowAdapter() {

//覆写窗口的关闭方法

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口被打开!");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosed(e);

System.out.println("窗口关闭!");

}

});

jframe.setLayout(new GridLayout(2,1));

pan.setLayout(new GridLayout(1,2));

pan.add(text);

pan.add(btn);

jframe.add(pan);

jframe.add(lab);

jframe.add(lab);

jframe.pack();//根据组件自动调整窗口

jframe.setLocation(500,400);

jframe.setBackground(Color.BLUE);

jframe.setVisible(true);

}

}

public class MyActionEventDemon01 {

public static void main(String args[]){

new ActionHandler();

}

}

运行程序首先会出现这样一个界面

7d2e3058332bad31ed14bcbadef1ed73.png

在文本框中输入内容后,单击显示,界面会变成这样

5ff13a1c78bfe8964d23c1aa8f900633.png

此时只要单击按钮就会触发监听器

了解了动作事件之后,实际上就可以使用此事件完成一个简单的用户登录操作。例如在程序中输入的用户名为MichaelLee密码为2014/7/9

则认为是合法用户,提示登录成功的信息。反之,则提示登陆失败的信息。代码如下:

先建一个类

class logincheck {

private String name;

private String password;

public logincheck(String name,String password){

this.name=name;

this.password=password;

}

public boolean validate(){

if("MichaelLee".equals(name)&&"2014/7/9".equals(password)){

return true;

}else{

return false;

}

}

}

登录操作实现:

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

class ActionHandle{//监听事件一旦形成,就一直处于监听状态,除非窗口关闭

private JFrame jFrame=new JFrame("Welcome to MichaelLee!");

private JButton submit=new JButton("登录");

private JButton reset=new JButton("重置");

private JLabel nameLabel=new JLabel("用户名");

private JLabel passJLabel=new JLabel("密码");

private JLabel infoLabel=new JLabel("用户登录系统");

private JTextField nameField=new JTextField();

private JPasswordField passField=new JPasswordField();

public ActionHandle(){

Font font=new Font("Serif",Font.BOLD,12);

infoLabel.setFont(font);

submit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==submit){//判断触发源是否是提交按钮

//System.out.println("NO!");

String tname=nameField.getText();

String tpass=passField.getText();

logincheck log=new logincheck(tname,tpass);

if(log.validate()){//对用户名和密码进行验证

infoLabel.setText("登陆成功,欢迎光临!");

}else{

infoLabel.setText("登录失败,错误的用户名或密码");

}

}

}});

reset.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==reset){//判断触发源是否是重置按钮

nameField.setText("");//清空文本框内容

passField.setText("");//清空密码框内容

infoLabel.setText("用户登录");

}

}

});

jFrame.addWindowListener(new WindowAdapter() {

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口打开");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.out.println("窗口关闭");

}

@Override

public void windowIconified(WindowEvent e) {

// TODO Auto-generated method stub

super.windowIconified(e);

System.out.println("窗口最小化");

}

@Override

public void windowDeiconified(WindowEvent e) {

// TODO Auto-generated method stub

super.windowDeiconified(e);

System.out.println("取消窗口最小化");

}

@Override

public void windowActivated(WindowEvent e) {

// TODO Auto-generated method stub

super.windowActivated(e);

System.out.println("选中窗口");

}

@Override

public void windowDeactivated(WindowEvent e) {

// TODO Auto-generated method stub

super.windowDeactivated(e);

System.out.println("取消窗口选中");

}

});

jFrame.setLayout(null);

nameLabel.setBounds(5,5,60,20);

passJLabel.setBounds(5,30,60, 20);

infoLabel.setBounds(5,65,220,30);

nameField.setBounds(65,5,100,20);

passField.setBounds(65,30,100,20);

submit.setBounds(165,5,60,20);

reset.setBounds(165,30,60,20);

jFrame.add(infoLabel);

jFrame.add(nameField);

jFrame.add(nameLabel);

jFrame.add(passField);

jFrame.add(passJLabel);

jFrame.add(reset);

jFrame.add(submit);

jFrame.setSize(380,130);

jFrame.setVisible(true);

}

}

public class MyActionExentDemon03 {

public static void main(String args[]){

new ActionHandle();

}

}

程序运行结果

51bc12f65f8c67587b8dbc636086b66d.png

输入正确的用户名和密码则会出现提示登陆成功,否则提示登录失败,单击重置按钮,内容被清空。

键盘事件及监听处理

在Swing中可以直接使用KeyListener接口对键盘的操作进行监听

KeyListener接口的方法

public void keyTyped(KeyEvent e)//输入某个键时调用

public void keyPressed(KeyEvent e)//键盘按下时调用

public void keyReleased(KeyEvent e)//键盘松开时调用

public char getKeyChar()//返回输入的字符,只针对与keyTyped有意义

public int getKeyCode()//返回输入字符的键码

public static String getKeyText(int keyCode)//返回此键的信息,如‘HOME’‘F1’或‘A’等

实现键盘监听

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class MykeyHandle extends JFrame implements KeyListener{

public JTextArea textArea=new JTextArea();

public MykeyHandle(){

super.setTitle("Welcome to MichaelLee!");

JScrollPane src=new JScrollPane(textArea);

src.setBounds(5, 5, 300, 200);

super.add(src);

textArea.addKeyListener(this);

super.setSize(310, 210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口打开");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.out.println("窗口关闭");

}

});

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

System.out.println("输入的内容是:"+e.getKeyChar()+"\n");//输出到后台

textArea.append("输入的内容是:"+e.getKeyChar()+"\n");//输入到多行文本框中

}

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

System.out.println("键盘"+KeyEvent.getKeyText(e.getKeyCode())+"键按下\n");//输出到后台

textArea.append("键盘"+KeyEvent.getKeyText(e.getKeyCode())+"键按下\n");//输入到多行文本框中

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

System.out.println("键盘"+KeyEvent.getKeyText(e.getKeyCode())+"键松开\n");//输出到后台

textArea.append("键盘"+KeyEvent.getKeyText(e.getKeyCode())+"键松开\n");//输入到多行文本框中

}

}

public class MyKeyEventDemon01 {

public static void main(String args[]){

new MykeyHandle().textArea.append("hahhahahhahah!");

}

}

运行结果

4826b2b2389fe5697930dd418299ea10.png

This表示当前对象,以上程序中,MyKeyHandle实现了KeyListener监听接口,所以此类也是监听操作类,这样当JTextArea增加事件时直接使用This关键字,如下所示:

text.addKeyListener(this);

This表示当前对象,此时将this加入到监听器中,就表示将一个监听处理类加入到监听器中。

在键盘监听中也可以使用KeyAdapter适配器完成键盘事件的监听

使用KeyAdapter

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class Mykeyhandle2 extends JFrame{

//此类直接继承了JFrame,以下的super可以理解为JFrame

private JTextArea textArea=new JTextArea();

public Mykeyhandle2(){

super.setTitle("Welcome to MichaelLee!");

JScrollPane src=new JScrollPane(textArea);

src.setBounds(5, 5, 300, 200);

super.add(src);

textArea.addKeyListener(new KeyAdapter() {//直接使用KeyAdapter完成监听,可以选择需要的方法进行覆写

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

super.keyTyped(e);

System.out.println("输入的内容是:"+e.getKeyChar()+"\n");

textArea.append("输入的内容是:"+e.getKeyChar()+"\n");

}

});

super.setSize(310, 210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowOpened(WindowEvent e) {

// TODO Auto-generated method stub

super.windowOpened(e);

System.out.println("窗口打开");

}

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.out.println("窗口关闭");

}

});

}

}

public class MyKeyEventDemon02 {

public static void main(String args[]){

new Mykeyhandle2();

}

}

运行效果

f0b552ab783ee9f23f18d1a563f31276.png

对鼠标事件进行监听可以使用MouseListener接口,常用方法如下:

public void mouseClicked(MouseEvent e)//鼠标单击时调用

public void mousePressed(MouseEvent e)//按下时调用

public void mouseReleased(MouseEvent e)//松开时调用

public void mouseEntered(MouseEvent e)//鼠标进入到组件时调用

public void mouseExited(MouseEvent e)//鼠标离开组件时调用

Public static final int BUTTON1//表示鼠标左键的常量

Public static final int BUTTON2//表示鼠标滚轴的常量

Public static final int BUTTON3//表示鼠标右键的常量

Public int getButton()//以数字形式返回按下的鼠标键

Public int getClickCount()//返回鼠标的单击次数

Public int getX()//返回鼠标操作的X坐标

Public int getY()//返回鼠标操作的Y坐标

实现鼠标监听

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class MyMousehandle extends JFrame implements MouseListener{

private JTextArea textArea=new JTextArea();

public MyMousehandle(){

super.setTitle("Welcome to MichaelLee!");

JScrollPane src=new JScrollPane(textArea);

src.setBounds(5, 5, 300, 200);

super.add(src);

textArea.addMouseListener(this);

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.exit(1);

}

});

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

int c=e.getButton();

String mouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}else if(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}else if(c==MouseEvent.BUTTON2){

mouseInfo="滚轴";

}

textArea.append("鼠标单击:"+mouseInfo+"\n");

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标按下。\n");

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标松开。\n");

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标进入组件。\n");

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标离开组件。\n");

}

}

public class MyMouseEventdemon01 {

public static void main(String args[]){

new MyMousehandle();

}

}

b718f52678baacafba1f74a99338807b.png

对鼠标事件进行监听可以使用MouseListener接口,常用方法如下:

public void mouseClicked(MouseEvent e)//鼠标单击时调用

public void mousePressed(MouseEvent e)//按下时调用

public void mouseReleased(MouseEvent e)//松开时调用

public void mouseEntered(MouseEvent e)//鼠标进入到组件时调用

public void mouseExited(MouseEvent e)//鼠标离开组件时调用

Public static final int BUTTON1//表示鼠标左键的常量

Public static final int BUTTON2//表示鼠标滚轴的常量

Public static final int BUTTON3//表示鼠标右键的常量

Public int getButton()//以数字形式返回按下的鼠标键

Public int getClickCount()//返回鼠标的单击次数

Public int getX()//返回鼠标操作的X坐标

Public int getY()//返回鼠标操作的Y坐标

实现鼠标监听

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class MyMousehandle extends JFrame implements MouseListener{

private JTextArea textArea=new JTextArea();

public MyMousehandle(){

super.setTitle("Welcome to MichaelLee!");

JScrollPane src=new JScrollPane(textArea);

src.setBounds(5, 5, 300, 200);

super.add(src);

textArea.addMouseListener(this);

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.exit(1);

}

});

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

int c=e.getButton();

String mouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}else if(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}else if(c==MouseEvent.BUTTON2){

mouseInfo="滚轴";

}

textArea.append("鼠标单击:"+mouseInfo+"\n");

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标按下。\n");

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标松开。\n");

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标进入组件。\n");

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

textArea.append("鼠标离开组件。\n");

}

}

public class MyMouseEventdemon01 {

public static void main(String args[]){

new MyMousehandle();

}

}

也可以通过MouseAdapter实现指定鼠标操作的监听

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class MyMousehandle3 extends JFrame{

private JTextArea textArea=new JTextArea();

public MyMousehandle3(){

super.setTitle("Welcome to MichaelLee!");

JScrollPane scr=new JScrollPane(textArea);

scr.setBounds(5, 5, 300, 200);

super.add(scr);

textArea.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {//z只覆写mouseClicked方法

// TODO Auto-generated method stub

super.mouseClicked(e);

int c=e.getButton();

String mouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}else if(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}else{

mouseInfo="滚轴";

}

textArea.append("鼠标单击:"+mouseInfo+"\n");

}

});

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.exit(1);

}

});

}

}

public class MyMouseEventDemon02 {

public static void main(String args[]){

new MyMousehandle();

}

}

a517b2d064505b587480cfa85838774f.png

鼠标拖曳事件及监听处理

在一般的图形界面经常可以看到鼠标拖曳操作的处理,在Swing事件处理方法中可以使用MouseMotionListener接口完成鼠标的拖曳操作。此接口常用方法:

Void mouseDragged(MouseEvent e)//在组件上按下并拖动时调用

Void MouseMoved(MouseEvent e)//鼠标移动到组件时调用

观察鼠标拖曳操作

鼠标拖曳事件及监听处理

在一般的图形界面经常可以看到鼠标拖曳操作的处理,在Swing事件处理方法中可以使用MouseMotionListener接口完成鼠标的拖曳操作。此接口常用方法:

Void mouseDragged(MouseEvent e)//在组件上按下并拖动时调用

Void MouseMoved(MouseEvent e)//鼠标移动到组件时调用

观察鼠标拖曳操作

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

class MyMouseMotionhandle extends JFrame{

public MyMouseMotionhandle(){

super.setTitle("Welcome to MichaelLee!");

super.addMouseMotionListener(new MouseMotionListener() {

@Override

public void mouseMoved(MouseEvent e) {

// TODO Auto-generated method stub

System.out.println("鼠标移动到窗体");

}

@Override

public void mouseDragged(MouseEvent e) {

// TODO Auto-generated method stub

System.out.println("鼠标拖也到:X="+e.getX()+",Y="+e.getY());

}

});

/*JButton ibt=new JButton("按钮");

super.add(ibt);*/

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

System.exit(1);

}

});

}

}

public class MyMouseMotionEventDemon01 {

public static void main(String args[]){

new MyMouseMotionhandle();

}

}

a5b2040bd20432ba46b60bf10ac3fff9.png

程序运行后发现,只要鼠标一向窗体移动就会触发mouseMoved()事件,只要是在窗体上拖曳,就会触发mouseDragged事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jedate-开始使用一款好用的时间插件

jeDate日期控件 -(原生JS版)jeDate V6.5.0 是一款原生JS开发的 不依赖任何第三方库 大众化的日期控件,包含 多语言、设定年月(YYYY-MM)、日期范围限制、开始日期设定、自定义日期格式、根据不同的日期格式,…

zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽

一、Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中。比如,连续采样…

linux下rpm方式安装mysql(2012-5-12)

由于感觉前几篇博客中关于linux下rpm方式安装mysql的方法问题太多,今天抽时间重新实践和整理了一下,现在拿出来和大家分享,希望对家有用。 系统环境:Rat had enterprise linux server 6.1MySQL-5.5.22-1.linux2.6.i386VMware Work…

list java语法_java基础语法 List

List的用法List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。表…

基础练习

口述题1.分别解释"","",""的含义。 是赋值语句 把一个值赋值给另一个值 是判断语句 判断两个值是否相等 是赋值语句 a1 等价于 aa1 2.两个变量的关系?n1123456n2n1 把123456赋值给变量n1,把n2赋值给n1,n1,n2共同指向123456这个地址 …

求大神解决下这个题目!做好请发到308960728@qq.com

RIP动态路由配置RIP是使用最广泛的距离向量协议,通过本次配置来理解RIP协议的传播、分析、挑选路由,来实现路由发现、路由选择、路由切换等功能,掌握RIP动态路由信息协议的配置方法。1.RIP配置环境与网络拓扑结构图实验设备:3台CI…

elastic search java_在 Java 应用程序中使用 Elasticsearch

如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣。尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsearch 项目背后的动机。Elasticsearch(构建于 Lucene 之上)在一个容易管理的包中提供了高性能的全文…

PostgreSQL增强版命令行客户端(pgcli)

效果: 安装: https://www.pgcli.com/install 官网: https://www.pgcli.com/ 转载于:https://www.cnblogs.com/EasonJim/p/9042418.html

网络设备的注册与初始化

2019独角兽企业重金招聘Python工程师标准>>> NIC可用之前,其相关联的net_device数据结构必须先初始化,添加到内核网络设备数据库、配置并开启。不要把注册/除名以及开启/关闭混淆是十分重要的,这是两种不同的概念: 如果…

[转]敏捷开发中编写高质量Java代码

本文转自:http://dev.yesky.com/103/11164603.shtml 敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的代码质量。 Java项目开发过程中,由于开发人员的…

ios3怎么取消长按弹出菜单_苹果:iOS13取消3D-Touch重压改为长按只是个BUG~

原标题:苹果:iOS13取消3D-Touch重压改为长按只是个BUG~目前iOS 13中3D-Touch功能在桌面级菜单采用的是类似iPhone XR的触觉感应(Haptic touch),用户只需要长按App图标即可呼出菜单,继续长按则会出现删除应用的抖动界面。不同于以往…

设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为

设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA3/5c,则tan(A-B)的最大值为 转载于:https://www.cnblogs.com/Mary-Sue/p/9048289.html

BGP笔记1

1、BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。 2、现在使用版本BGP-4。 3、第一次做完整更新,以后就只增量更新 4、Autonomous Systems:运行同一种选路策略,由统一管理者管理。 1&am…

也说读书

记得当年毕业前夕,一位教授说:“希望你们毕业后,能坚持每年读10本书。”当时不以为然,区区十本,岂非小菜!毕业后,迫于生计,东奔西走,很难静心读书,偶尔拿起书…

C# 巧用anchor和dock设计复杂界面(控件随着窗体大小的变化而变化)【转】

这个在做winform程序的空间编程的时候遇到过太多次了,自己也想留下点经验,搜索了一下,这篇文章很好很强大了,感谢博主“驴子的菜园”。 程序界面如上 各部分简要说明: 整个窗体上覆盖一个splitcontainer。 splitcontai…

mysql内链接与交叉连接_SQLServer 2008中的交叉连接与内部连接

这里是交叉连接和内部连接的最佳示例。考虑下表表:Teacherx------------------------x| TchrId | TeacherName |x----------|-------------x| T1 | Mary || T2 | Jim |x------------------------x表:Studentx-------------…

jmeter java接口_JMeter接口Java开发五步曲

想做jmeter接口二次开发但不知道如何入手,要解决这个问题,我们可以分为5个步骤第一步:了解jmeter处理java请求的流程第二步:通过实现jmeter中的接口JavaSamplerClient编写自定义JAVA接口第三步:打包第四步:…

@ConfigurationProperties和@Value不同的使用场景,@Bean添加组件 (6.spring boot配置文件注入)...

接上文 注释掉ConfigurationProperties使用Value注解 /*** <bean class"Person">* <property name"lastName" value"字面量/${key}从环境变量、配置文件中获取值/#{spel}"></property>* <bean/>*/ //Spring底层注解…

java继承孙子类_Java:类与继承

Java&#xff1a;类与继承对于面向对象的程序设计语言来说&#xff0c;类毫无疑问是其最重要的基础。抽象、封装、继承、多态 这四大特性都离不开类&#xff0c;只有存在类&#xff0c;才能体现面向对象编程的特点&#xff0c;今天我们就来了解一些类与继承的相关知识。首先&am…

P2787 语文1(chin1)- 理理思维

题目背景 蒟蒻HansBug在语文考场上&#xff0c;挠了无数次的头&#xff0c;可脑子里还是一片空白。 题目描述 考试开始了&#xff0c;可是蒟蒻HansBug脑中还是一片空白。哦不&#xff01;准确的说是乱七八糟的。现在首要任务就是帮蒟蒻HansBug理理思维。假设HansBug的思维是一长…