100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java swing事件_第四节 Java Swing事件处理

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

时间:2018-09-26 13:09:30

相关推荐

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

第四节:事件处理

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

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

窗体事件

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

publicvoidwindowOpened(WindowEvente)//窗口打开时触发

publicvoidwindowClosing(WindowEvente)//窗口正在关闭时触发

publicvoidwindowIconified(WindowEvente)//窗口最小化时触发

publicvoidwindowDeiconified(WindowEvente)//窗口从最小化恢复到正常状态时触发

publicvoidwindowActivated(WindowEvente)//将窗口变为活动窗口时触发

publicvoidwindowDeactivated(WindowEvente)//将窗口变为不活动窗口时触发

建立一个监听器

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowListener;

publicclassMyWindowEventHandleimplementsWindowListener{

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidwindowClosed(WindowEvente){

//TODOAuto-generatedmethodstub

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

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

}

@Override

publicvoidwindowIconified(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidwindowDeiconified(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidwindowActivated(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidwindowDeactivated(WindowEvente){

//TODOAuto-generatedmethodstub

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

}

}

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

importjava.awt.Color;

importjavax.swing.JFrame;

publicclassMyWindowEventJFrame01{

publicstaticvoidmain(Stringargs[]){

JFramejFrame=newJFrame("WelcometoMichaelLee!");

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

jFrame.addWindowListener(newMyWindowEventHandle());

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实现监听

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

publicclassMyWindowAdapterHandlerextendsWindowAdapter{

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosed(e);

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

}

}

注册事件监听

importjava.awt.Color;

importjavax.swing.JFrame;

publicclassMyWindowEventJFrame02{

publicstaticvoidmain(Stringargs[]){

JFramejFrame=newJFrame("WelcometoMichaelLee!");

jFrame.addWindowListener(newMyWindowAdapterHandler());

jFrame.setSize(500,400);

jFrame.setLocation(300,400);

jFrame.setBackground(Color.BLUE);

jFrame.setVisible(true);

}

}

程序运行结果:

窗口被打开!

窗口关闭!

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

使用匿名内部类:

importjava.awt.Color;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowListener;

importjavax.swing.JFrame;

publicclassMyWindowEventJframe03{

publicstaticvoidmain(Stringargs[]){

JFramejFrame=newJFrame("WelcometoMichaelLee!");

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

jFrame.addWindowListener(newWindowAdapter(){

//覆写窗口的关闭方法

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosed(e);

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

}

});

jFrame.setSize(500,400);

jFrame.setLocation(300,400);

jFrame.setBackground(Color.BLUE);

jFrame.setVisible(true);

}

}

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

动作事件及监听处理:

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

VoidactiongPerformed(ActionEvente)//发生操作时调用

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

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Frame;

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

classActionHandler{

privateJFramejframe=newJFrame("WelcometoMichaelLee!");

privateJButtonbtn=newJButton("显示");

privateJLabellab=newJLabel();

privateJTextFieldtext=newJTextField(10);//定义一个文本域

privateJPanelpan=newJPanel();//定义一个版面

publicActionHandler(){

Fontfont=newFont("Serif",Font.ITALIC+Font.BOLD,28);

lab.setFont(font);

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

btn.addActionListener(newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

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

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

}

}

});

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

jframe.addWindowListener(newWindowAdapter(){

//覆写窗口的关闭方法

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosed(e);

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

}

});

jframe.setLayout(newGridLayout(2,1));

pan.setLayout(newGridLayout(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);

}

}

publicclassMyActionEventDemon01{

publicstaticvoidmain(Stringargs[]){

newActionHandler();

}

}

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

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

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

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

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

先建一个类

classlogincheck{

privateStringname;

privateStringpassword;

publiclogincheck(Stringname,Stringpassword){

this.name=name;

this.password=password;

}

publicbooleanvalidate(){

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

returntrue;

}else{

returnfalse;

}

}

}

登录操作实现:

importjava.awt.Font;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPasswordField;

importjavax.swing.JTextField;

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

privateJFramejFrame=newJFrame("WelcometoMichaelLee!");

privateJButtonsubmit=newJButton("登录");

privateJButtonreset=newJButton("重置");

privateJLabelnameLabel=newJLabel("用户名");

privateJLabelpassJLabel=newJLabel("密码");

privateJLabelinfoLabel=newJLabel("用户登录系统");

privateJTextFieldnameField=newJTextField();

privateJPasswordFieldpassField=newJPasswordField();

publicActionHandle(){

Fontfont=newFont("Serif",Font.BOLD,12);

infoLabel.setFont(font);

submit.addActionListener(newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

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

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

Stringtname=nameField.getText();

Stringtpass=passField.getText();

loginchecklog=newlogincheck(tname,tpass);

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

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

}else{

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

}

}

}});

reset.addActionListener(newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

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

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

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

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

}

}

});

jFrame.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

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

}

@Override

publicvoidwindowIconified(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowIconified(e);

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

}

@Override

publicvoidwindowDeiconified(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowDeiconified(e);

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

}

@Override

publicvoidwindowActivated(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowActivated(e);

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

}

@Override

publicvoidwindowDeactivated(WindowEvente){

//TODOAuto-generatedmethodstub

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);

}

}

publicclassMyActionExentDemon03{

publicstaticvoidmain(Stringargs[]){

newActionHandle();

}

}

程序运行结果

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

键盘事件及监听处理

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

KeyListener接口的方法

publicvoidkeyTyped(KeyEvente)//输入某个键时调用

publicvoidkeyPressed(KeyEvente)//键盘按下时调用

publicvoidkeyReleased(KeyEvente)//键盘松开时调用

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

publicintgetKeyCode()//返回输入字符的键码

publicstaticStringgetKeyText(intkeyCode)//返回此键的信息,如‘HOME’‘F1’或‘A’等

实现键盘监听

importjava.awt.event.KeyEvent;

importjava.awt.event.KeyListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

classMykeyHandleextendsJFrameimplementsKeyListener{

publicJTextAreatextArea=newJTextArea();

publicMykeyHandle(){

super.setTitle("WelcometoMichaelLee!");

JScrollPanesrc=newJScrollPane(textArea);

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

super.add(src);

textArea.addKeyListener(this);

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

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

}

});

}

@Override

publicvoidkeyTyped(KeyEvente){

//TODOAuto-generatedmethodstub

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

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

}

@Override

publicvoidkeyPressed(KeyEvente){

//TODOAuto-generatedmethodstub

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

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

}

@Override

publicvoidkeyReleased(KeyEvente){

//TODOAuto-generatedmethodstub

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

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

}

}

publicclassMyKeyEventDemon01{

publicstaticvoidmain(Stringargs[]){

newMykeyHandle().textArea.append("hahhahahhahah!");

}

}

运行结果

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

text.addKeyListener(this);

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

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

使用KeyAdapter

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

classMykeyhandle2extendsJFrame{

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

privateJTextAreatextArea=newJTextArea();

publicMykeyhandle2(){

super.setTitle("WelcometoMichaelLee!");

JScrollPanesrc=newJScrollPane(textArea);

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

super.add(src);

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

@Override

publicvoidkeyTyped(KeyEvente){

//TODOAuto-generatedmethodstub

super.keyTyped(e);

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

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

}

});

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowOpened(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowOpened(e);

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

}

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

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

}

});

}

}

publicclassMyKeyEventDemon02{

publicstaticvoidmain(Stringargs[]){

newMykeyhandle2();

}

}

运行效果

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

publicvoidmouseClicked(MouseEvente)//鼠标单击时调用

publicvoidmousePressed(MouseEvente)//按下时调用

publicvoidmouseReleased(MouseEvente)//松开时调用

publicvoidmouseEntered(MouseEvente)//鼠标进入到组件时调用

publicvoidmouseExited(MouseEvente)//鼠标离开组件时调用

PublicstaticfinalintBUTTON1//表示鼠标左键的常量

PublicstaticfinalintBUTTON2//表示鼠标滚轴的常量

PublicstaticfinalintBUTTON3//表示鼠标右键的常量

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

PublicintgetClickCount()//返回鼠标的单击次数

PublicintgetX()//返回鼠标操作的X坐标

PublicintgetY()//返回鼠标操作的Y坐标

实现鼠标监听

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

classMyMousehandleextendsJFrameimplementsMouseListener{

privateJTextAreatextArea=newJTextArea();

publicMyMousehandle(){

super.setTitle("WelcometoMichaelLee!");

JScrollPanesrc=newJScrollPane(textArea);

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

super.add(src);

textArea.addMouseListener(this);

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

System.exit(1);

}

});

}

@Override

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

intc=e.getButton();

StringmouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}elseif(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}elseif(c==MouseEvent.BUTTON2){

mouseInfo="滚轴";

}

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

}

@Override

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

}

publicclassMyMouseEventdemon01{

publicstaticvoidmain(Stringargs[]){

newMyMousehandle();

}

}

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

publicvoidmouseClicked(MouseEvente)//鼠标单击时调用

publicvoidmousePressed(MouseEvente)//按下时调用

publicvoidmouseReleased(MouseEvente)//松开时调用

publicvoidmouseEntered(MouseEvente)//鼠标进入到组件时调用

publicvoidmouseExited(MouseEvente)//鼠标离开组件时调用

PublicstaticfinalintBUTTON1//表示鼠标左键的常量

PublicstaticfinalintBUTTON2//表示鼠标滚轴的常量

PublicstaticfinalintBUTTON3//表示鼠标右键的常量

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

PublicintgetClickCount()//返回鼠标的单击次数

PublicintgetX()//返回鼠标操作的X坐标

PublicintgetY()//返回鼠标操作的Y坐标

实现鼠标监听

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

classMyMousehandleextendsJFrameimplementsMouseListener{

privateJTextAreatextArea=newJTextArea();

publicMyMousehandle(){

super.setTitle("WelcometoMichaelLee!");

JScrollPanesrc=newJScrollPane(textArea);

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

super.add(src);

textArea.addMouseListener(this);

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

System.exit(1);

}

});

}

@Override

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

intc=e.getButton();

StringmouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}elseif(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}elseif(c==MouseEvent.BUTTON2){

mouseInfo="滚轴";

}

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

}

@Override

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

}

publicclassMyMouseEventdemon01{

publicstaticvoidmain(Stringargs[]){

newMyMousehandle();

}

}

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

importjava.awt.event.MouseAdapter;

importjava.awt.event.MouseEvent;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JFrame;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

classMyMousehandle3extendsJFrame{

privateJTextAreatextArea=newJTextArea();

publicMyMousehandle3(){

super.setTitle("WelcometoMichaelLee!");

JScrollPanescr=newJScrollPane(textArea);

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

super.add(scr);

textArea.addMouseListener(newMouseAdapter(){

@Override

publicvoidmouseClicked(MouseEvente){//z只覆写mouseClicked方法

//TODOAuto-generatedmethodstub

super.mouseClicked(e);

intc=e.getButton();

StringmouseInfo=null;

if(c==MouseEvent.BUTTON1){

mouseInfo="左键";

}elseif(c==MouseEvent.BUTTON3){

mouseInfo="右键";

}else{

mouseInfo="滚轴";

}

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

}

});

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

System.exit(1);

}

});

}

}

publicclassMyMouseEventDemon02{

publicstaticvoidmain(Stringargs[]){

newMyMousehandle();

}

}

鼠标拖曳事件及监听处理

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

VoidmouseDragged(MouseEvente)//在组件上按下并拖动时调用

VoidMouseMoved(MouseEvente)//鼠标移动到组件时调用

观察鼠标拖曳操作

鼠标拖曳事件及监听处理

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

VoidmouseDragged(MouseEvente)//在组件上按下并拖动时调用

VoidMouseMoved(MouseEvente)//鼠标移动到组件时调用

观察鼠标拖曳操作

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseMotionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.JButton;

importjavax.swing.JFrame;

classMyMouseMotionhandleextendsJFrame{

publicMyMouseMotionhandle(){

super.setTitle("WelcometoMichaelLee!");

super.addMouseMotionListener(newMouseMotionListener(){

@Override

publicvoidmouseMoved(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

@Override

publicvoidmouseDragged(MouseEvente){

//TODOAuto-generatedmethodstub

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

}

});

/*JButtonibt=newJButton("按钮");

super.add(ibt);*/

super.setSize(310,210);

super.setVisible(true);

super.addWindowListener(newWindowAdapter(){

@Override

publicvoidwindowClosing(WindowEvente){

//TODOAuto-generatedmethodstub

super.windowClosing(e);

System.exit(1);

}

});

}

}

publicclassMyMouseMotionEventDemon01{

publicstaticvoidmain(Stringargs[]){

newMyMouseMotionhandle();

}

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。