java gui事件处理,gui图形用户界面编程

  java gui事件处理,gui图形用户界面编程

  Swing组件中的事件处理是专门用来响应用户的动作的,比如鼠标点击、键盘按压等等。在Swing事件处理过程中,主要涉及三类对象:

  1.事件源:事件发生的地方,通常是产生事件的组件,如窗口、按钮、菜单等。

  2.事件对象:它封装了发生在GUI组件上的特定事件(通常是用户的操作)。

  3.侦听器:它负责监视事件源上的事件,并相应地处理各种事件(侦听器对象包括事件处理程序)。

  实现Swing事件处理的主要步骤如下:

  1.创建事件源:除了一些常见的按钮、键盘等组件可以作为事件源,包括JFrame窗口在内的顶级容器也可以作为事件源。

  2.自定义事件监听器:根据要监控的事件源,创建指定类型的监听器进行事件处理。Listener是一个特殊的java类,必须实现XxxListener接口。根据组件触发的动作,比如WindowListener用来监控窗口事件,ActionListener用来监控动作事件。

  3.为事件源注册侦听器:使用addXxxListener()方法为指定的事件源添加特定类型的侦听器。当事件源上发生侦听事件时,将触发绑定的事件侦听器,侦听器中的方法将相应地处理事件。

  Swing常用的事件处理包括:表单事件、鼠标事件、键盘事件、动作事件等。本文主要针对鼠标事件来实现一个窗口的登录和退出操作。

  鼠标事件:

  在图形用户界面中,用户经常使用鼠标进行选择、切换界面等操作。这些操作被定义为鼠标事件,包括鼠标按压、鼠标释放、鼠标点击等等。Java提供了一个MouseEvent类来描述鼠标事件。在处理鼠标事件时,首先需要通过实现MouseListener接口来定义一个监听器(也可以通过继承适配器的MouseAdapter类来定义一个监听器),然后调用addMouseListener()方法将监听器绑定到事件源对象。

  鼠标事件案例1:通过MouseListener接口定义一个监听器实现登录和注销操作。

  导入javax . swing . *;导入Java . awt . *;导入Java . awt . event . mouse event;导入Java . awt . event . mouse listener;Class GUI _ 3事件处理{ public static void main(string[]args){ GUI text 1 gt=new GUI text 1();} }//创建一个鼠标监视器类来实现监视器接口ClassGuiText1实现鼠标监听器{ jframejfJPanel jpJLabel l1,L2;JTextField f1,F2;JButton jb1,jb2PublicText1 () {JF=newjframe(登录窗口);jf.setBounds(300,200,350,300);jp=new JPanel();Font font=新字体(仿宋,字体。粗体,20);L1=新JLabel(用户名:);l1.setFont(字体);F1=new JTextField(请输入用户名!,20);f1.setFont(字体);L2=新JLabel(秘密代码:);l2.setFont(字体);F2=new JTextField(请输入您的密码!,20);f2.setFont(字体);jb1=new JButton( log in );jb1.setFont(字体);jb1 . addmouse listener(this);//Login button注册侦听器jb2=new JButton( exit );jb2.setFont(字体);jb2 . addmouse listener(this);//退出按钮注册监听器jp . add(L1);jp . add(f1);jp . add(L2);jp . add(F2);jp . add(jb1);jp . add(jb2);JF . add(jp);JF . set visible(true);}//这些方法可以不写,但是必须创建@ override public void mousepror。

  essed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } //鼠标点击事件 //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。 @Override public void mouseClicked(MouseEvent e) { //getSource()==>得到事件源 if(e.getSource().equals(jb1)) { if(f1.getText().equals("小明")&&f2.getText().equals("123456")) { //showMessageDialog==>提供一个名为“消息”的信息消息对话框。 JOptionPane.showMessageDialog(null, "登录成功!"); }else{ JOptionPane.showMessageDialog(null, "登录失败,请重新输入!"); //将文本清空 f1.setText(null); f2.setText(null); } }//getSource()==>得到事件源 if(e.getSource().equals(jb2)) { JOptionPane.showMessageDialog(null, "退出成功!"); //关闭当前窗口 //jf.dispose(); //系统退出 System.exit(0); } } }案例二:通过继承适配器MouseAdapter类定义监听器来实现登录、退出操作

  

import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class GUI_3事件处理2 { public static void main(String[] args) { guitext2 gt=new guitext2(); } } class guitext2{ JFrame jf; JPanel jp; JLabel l1,l2; JTextField f1,f2; JButton jb1,jb2; public guitext2() { jf = new JFrame("登录窗口"); jf.setBounds(300, 200, 350, 300); jp = new JPanel(); Font font = new Font("仿宋", Font.BOLD, 20); l1 = new JLabel("用户名:"); l1.setFont(font); //输入用户名,JTextField==>允许编辑单行文本,显示原始字符 f1 = new JTextField(null,20); f1.setFont(font); l2 = new JLabel("密 码:"); l2.setFont(font); //f2 = new JTextField("请输入密码!",20); //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。 f2=new JPasswordField(null,20); f2.setFont(font); jb1 = new JButton("登录"); jb1.setFont(font); //为按钮添加(注册)自定义鼠标监听事件监听器,并将f1,f2传入 guitext2_1 gt=new guitext2_1(f1,f2); jb1.addMouseListener(gt); jb2 = new JButton("退出"); jb2.setFont(font); jb2.addMouseListener(gt); // jb2.addMouseListener(new guitext2_1());//另一种写法 jp.add(l1); jp.add(f1); jp.add(l2); jp.add(f2); jp.add(jb1); jp.add(jb2); jf.add(jp); jf.setVisible(true); } } //自定义一个鼠标监听类//MouseAdapter==>用于接收鼠标事件的抽象适配器类 class guitext2_1 extends MouseAdapter { //将f1,f2传入 JTextField f1,f2; public guitext2_1(JTextField f1, JTextField f2) { this.f1 = f1; this.f2 = f2; } //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。 public void mouseClicked(MouseEvent e) { //getSource()==>得到事件源 JButton jButton=(JButton)e.getSource(); if(jButton.getText().equals("登录")){ if(f1.getText().equals("小明")&&f2.getText().equals("123456")) { JOptionPane.showMessageDialog(null, "登录成功!"); }else{ //showMessageDialog==>提供一个名为“消息”的信息消息对话框。 JOptionPane.showMessageDialog(null, "登录失败!"); //将文本清空 f1.setText(null); f2.setText(null); } } if(jButton.getText().equals("退出")){ JOptionPane.showMessageDialog(null, "退出成功!"); //系统退出 System.exit(0); } } }

案例三:内部类

 

  

import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class GUI_3事件处理2 { public static void main(String[] args) { guitext2 gt=new guitext2(); }}class guitext2{ JFrame jf; JPanel jp; JLabel l1,l2; JTextField f1,f2; JButton jb1,jb2; public guitext2() { jf = new JFrame("登录窗口"); jf.setBounds(300, 200, 350, 300); jp = new JPanel(); Font font = new Font("仿宋", Font.BOLD, 20); l1 = new JLabel("用户名:"); l1.setFont(font); //输入用户名,JTextField==>允许编辑单行文本,显示原始字符 f1 = new JTextField(null,20); f1.setFont(font); l2 = new JLabel("密 码:"); l2.setFont(font); //f2 = new JTextField("请输入密码!",20); //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。 f2=new JPasswordField(null,20); f2.setFont(font); jb1 = new JButton("登录"); jb1.setFont(font); //为按钮添加(注册)自定义鼠标监听事件监听器 guitext2_1 gt=new guitext2_1(); jb1.addMouseListener(gt); jb2 = new JButton("退出"); jb2.setFont(font); jb2.addMouseListener(gt); jb2.addMouseListener(new guitext2_1());//另一种写法 jp.add(l1); jp.add(f1); jp.add(l2); jp.add(f2); jp.add(jb1); jp.add(jb2); jf.add(jp); jf.setVisible(true); } //内部类//MouseAdapter==>用于接收鼠标事件的抽象适配器类 class guitext2_1 extends MouseAdapter { //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。 public void mouseClicked(MouseEvent e) { //getSource()==>得到事件源 JButton jButton=(JButton)e.getSource(); if(jButton.getText().equals("登录")){ if(f1.getText().equals("小明")&&f2.getText().equals("123456")) { JOptionPane.showMessageDialog(null, "登录成功!"); }else{ //showMessageDialog==>提供一个名为“消息”的信息消息对话框。 JOptionPane.showMessageDialog(null, "登录失败!"); //将文本清空 f1.setText(null); f2.setText(null); } } if(jButton.getText().equals("退出")){ JOptionPane.showMessageDialog(null, "退出成功!"); //系统退出 System.exit(0); } } }}

案例四:匿名内部类

 

  

import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class GUI_3事件处理3 { public static void main(String[] args) { guitext3 gt=new guitext3(); }}class guitext3{ JFrame jf; JPanel jp; JLabel l1,l2; JTextField f1,f2; JButton jb1,jb2; public guitext3() { jf = new JFrame("登录窗口"); jf.setBounds(300, 200, 350, 300); jp = new JPanel(); Font font = new Font("仿宋", Font.BOLD, 20); l1 = new JLabel("用户名:"); l1.setFont(font); //输入用户名,JTextField==>允许编辑单行文本,显示原始字符 f1 = new JTextField(null,20); f1.setFont(font); l2 = new JLabel("密 码:"); l2.setFont(font); //f2 = new JTextField("请输入密码!",20); //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。 f2=new JPasswordField(null,20); f2.setFont(font); jb1 = new JButton("登录"); //匿名内部类 jb1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(f1.getText().equals("小明")&&f2.getText().equals("123456")) { JOptionPane.showMessageDialog(null, "登录成功!"); }else{ //showMessageDialog==>提供一个名为“消息”的信息消息对话框。 JOptionPane.showMessageDialog(null, "登录失败!"); //将文本清空 f1.setText(null); f2.setText(null); } } }); jb1.setFont(font); jb2 = new JButton("退出"); //匿名内部类 jb2.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { JOptionPane.showMessageDialog(null, "退出成功!"); //系统退出 System.exit(0); } }); jb2.setFont(font); jp.add(l1); jp.add(f1); jp.add(l2); jp.add(f2); jp.add(jb1); jp.add(jb2); jf.add(jp); jf.setVisible(true); }}

其实这些是由复杂的代码逐渐简化的过程。

 

  我突然发现其中的JPanel还没有给大家解读过,所以在这里插入一下这个小知识:

  JPanel面板组件是一个无边框且不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。也可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或者setLayout()成员方法设置JPanel布局管理器。JPanel也被称为中间容器。

  到此这篇关于Java深入学习图形用户界面GUI之事件处理的文章就介绍到这了,更多相关Java事件处理内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: