当前位置:   article > 正文

GUI图形编程(6)---事件_图形交互 编程模型 事件

图形交互 编程模型 事件

事件的概念

事件处理是界面处理的基本功能,当用户点击鼠标或者按下键盘时,Swing界面上获得焦点的组件都会收到一个事件通知,这个事件通知是Swing体系内部发出的,界面就会根据收到的事件通知,做出相应的处理,比如弹出对话框或者读取用户输入。

Java Swing事件处理模型

                                     事件源  ;   注册事件监听器   ;  事件监听器

事件处理流程

(1)明确事件源。所有的图形界面组件对象都可以成为事件源对象。如何确定某一组件是事件源对象?动作发生在哪一个组件上,那么该组件就是一个事件源对象。

(2)为事件源添加事件监听方法。监听器方法根据发送的动作来确定。假设发生一个鼠标点击的动作,那么要给事件源添加鼠标的监听器方法。

(3)事件处理。自定义事件处理类,实现对应的接口,实现该接口的抽象方法

  1. package org.lanqiao.loginui;
  2. import java.awt.Cursor;
  3. import java.awt.Image;
  4. import java.awt.event.FocusAdapter;
  5. import java.awt.event.FocusEvent;
  6. import java.awt.event.FocusListener;
  7. import java.awt.event.KeyEvent;
  8. import java.awt.event.KeyListener;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.MouseListener;
  12. import java.awt.event.MouseMotionListener;
  13. import java.util.Map;
  14. import javax.swing.ImageIcon;
  15. import javax.swing.JButton;
  16. import javax.swing.JFrame;
  17. import javax.swing.JLabel;
  18. import javax.swing.JOptionPane;
  19. import javax.swing.JPanel;
  20. import javax.swing.JPasswordField;
  21. import javax.swing.JTextField;
  22. public class LoginUI {
  23. JFrame loginFrame;
  24. JPanel loginPanel;
  25. JTextField username;
  26. JPasswordField password;
  27. JLabel codeImg = new JLabel();
  28. private String uname;
  29. private String pw;
  30. JButton bt = new JButton("按钮");
  31. public LoginUI() {
  32. loginFrame = new JFrame();
  33. loginPanel = new JPanel();//使用空布局
  34. username = new JTextField();
  35. password = new JPasswordField();
  36. }
  37. public void init() {
  38. loginFrame.setSize(650, 400);
  39. loginFrame.setIconImage(new ImageIcon("image/title.gif").getImage());
  40. loginFrame.setLocationRelativeTo(null);
  41. loginFrame.setResizable(false);
  42. loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  43. loginPanel = new LoginPanel("image/login1.jpg");
  44. loginPanel.setLayout(null);
  45. username.setBounds(390, 157, 192, 25);
  46. password.setBounds(390, 191, 192, 25);
  47. bt.setBounds(300, 120, 120, 25);
  48. Map<String,Object> codeAndPic = CodeUtil.generateCodeAndPic();
  49. codeImg.setIcon(new ImageIcon((Image)codeAndPic.get("codePic")));
  50. codeImg.setBounds(502, 235, 90, 20);
  51. loginPanel.add(codeImg);
  52. loginPanel.add(bt);
  53. loginPanel.add(username);
  54. loginPanel.add(password);
  55. loginFrame.add(loginPanel);
  56. loginFrame.setVisible(true);
  57. //当鼠标移动进入登陆按钮区域时,改变鼠标的形状
  58. loginFrame.addMouseMotionListener(new MouseMotionListener() {
  59. @Override
  60. public void mouseMoved(MouseEvent e) {
  61. int x = e.getX();//获取鼠标当前所处位置的x坐标
  62. int y = e.getY();
  63. if(x > 397 && x < 504 && y > 308 && y < 336) {
  64. Cursor c = new Cursor(Cursor.HAND_CURSOR);
  65. loginFrame.setCursor(c);
  66. }else {
  67. loginFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  68. }
  69. }
  70. @Override
  71. public void mouseDragged(MouseEvent e) {
  72. // TODO Auto-generated method stub
  73. }
  74. });
  75. //当鼠标进入到登陆按钮区域时,监听鼠标单击事件
  76. loginFrame.addMouseListener(new MouseAdapter() {
  77. /*
  78. * 鼠标单击事件
  79. * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
  80. */
  81. @Override
  82. public void mouseClicked(MouseEvent e) {
  83. uname = username.getText();
  84. pw = new String(password.getPassword());
  85. int x = e.getX();//获取鼠标当前所处位置的x坐标
  86. int y = e.getY();
  87. if(x > 397 && x < 504 && y > 308 && y < 336) {
  88. String loginRes = new LoginController().login(uname, pw);
  89. if("用户名密码为空".equals(loginRes)) {
  90. JOptionPane.showMessageDialog(loginFrame, "用户名或密码不能为空","Inane warning",
  91. JOptionPane.WARNING_MESSAGE);
  92. }else if("用户名密码有误".equals(loginRes)) {
  93. JOptionPane.showMessageDialog(loginFrame, "用户名密码有误","Inane warning",
  94. JOptionPane.WARNING_MESSAGE);
  95. }
  96. else {
  97. JOptionPane.showMessageDialog(loginFrame, "登陆成功","Inane warning",
  98. JOptionPane.WARNING_MESSAGE);
  99. loginFrame.setVisible(false);
  100. }
  101. }
  102. }
  103. });
  104. bt.addMouseListener(new MouseAction());
  105. username.addFocusListener(new FocusAdapter() {
  106. @Override
  107. public void focusLost(FocusEvent e) {
  108. System.out.println(username.getText());
  109. }
  110. });
  111. password.addKeyListener(new KeyListener() {
  112. @Override
  113. public void keyTyped(KeyEvent e) {
  114. // TODO Auto-generated method stub
  115. }
  116. @Override
  117. public void keyReleased(KeyEvent e) {
  118. /*int keyCode = e.getKeyCode();
  119. String keyText = e.getKeyText(keyCode);
  120. System.out.println(keyCode+"----"+keyText);*/
  121. //当按下的a键的时候,输出"你好"
  122. if(KeyEvent.VK_A == e.getKeyCode()) {
  123. System.out.println("你好");
  124. }
  125. }
  126. @Override
  127. public void keyPressed(KeyEvent e) {
  128. // TODO Auto-generated method stub
  129. }
  130. });
  131. }
  132. public static void main(String[] args) {
  133. LoginUI ui = new LoginUI();
  134. ui.init();
  135. }
  136. }
  137. class MouseAction extends MouseAdapter{
  138. @Override
  139. public void mouseClicked(MouseEvent e) {
  140. System.out.println("按钮被点击了");
  141. }
  142. }

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/931421
推荐阅读
相关标签
  

闽ICP备14008679号