请完成对本周的学习小结,上机课没完成布局管理器的同学还可以继续完成。
1 import javax.swing.*; 2 import java.awt.*; 3 4 public class LoginWindow 5 { 6 JFrame frame; 7 JLabel lblUser,lblPsw,lblResult; 8 JTextField tfUser; 9 JPasswordField pfPsw; 10 JButton btnLogin,btnReset; 11 12 public LoginWindow() 13 { 14 frame = new JFrame("登录窗体"); 15 lblUser = new JLabel("用户名"); 16 lblPsw = new JLabel("密码"); 17 lblResult = new JLabel(); 18 tfUser = new JTextField(); 19 pfPsw = new JPasswordField(); 20 btnLogin = new JButton("登录"); 21 btnReset = new JButton("重置"); 22 23 frame.setLayout(null); 24 25 lblUser.setBounds(10,10,40,30); 26 lblPsw.setBounds(10,50,40,30); 27 tfUser.setBounds(60,10,100,30); 28 pfPsw.setBounds(60,50,100,30); 29 btnLogin.setBounds(40,90,60,30); 30 btnReset.setBounds(120,90,60,30); 31 lblResult.setBounds(50,140,200,30); 32 33 34 frame.add(lblUser); 35 frame.add(lblPsw); 36 frame.add(tfUser); 37 frame.add(pfPsw); 38 frame.add(btnLogin); 39 frame.add(btnReset); 40 frame.add(lblResult); 41 42 43 44 MyListener listener = new MyListener(this); 45 btnLogin.addActionListener(listener); 46 btnReset.addActionListener(listener); 47 48 frame.setSize(400,300); 49 frame.setVisible(true); 50 } 51 }
1 public class Test { 2 3 public static void main(String[] args) 4 { 5 new LoginWindow(); 6 7 } 8 9 }
1 import java.awt.event.ActionEvent; 2 import java.awt.event.ActionListener; 3 4 import javax.swing.JButton; 5 6 public class MyListener implements ActionListener 7 { 8 9 LoginWindow loginWindow; 10 11 public MyListener(LoginWindow loginWindow) 12 { 13 this.loginWindow = loginWindow; 14 } 15 16 public void actionPerformed(ActionEvent event) 17 { 18 if(event.getSource() instanceof JButton) 19 { 20 JButton btn = (JButton)event.getSource(); 21 if(btn == loginWindow.btnLogin) 22 { 23 String username = loginWindow.tfUser.getText(); 24 String psw = new String(loginWindow.pfPsw.getPassword()); 25 26 if(username.equals("admin")&&psw.equals("123456")) 27 { 28 loginWindow.lblResult.setText("登录成功"); 29 } 30 else 31 { 32 loginWindow.lblResult.setText("登录失败"); 33 } 34 } 35 else if(btn==loginWindow.btnReset) 36 { 37 loginWindow.tfUser.setText(""); 38 loginWindow.pfPsw.setText(""); 39 } 40 } 41 42 } 43 }
运行结果:
监听器模型涉及以下三个对象,模型图如下:
(1)事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件,如机器人程序执行工作。
(2)事件源:发生事件的组件就是事件源,也就是被监听的对象,如机器人可以工作,可以跳舞,那么就可以把机器人看做是一个事件源。
(3)事件监听器(处理器):监听并负责处理事件的方法,如监听机器人工作情况,在机器人工作前后做出相应的动作,或者获取机器人的状态信息。
执行顺序如下:
1、给事件源注册监听器。
2、组件接受外部作用,也就是事件被触发。
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器。
4、事件处理器启动,并执行相关的代码来处理该事件。
匿名内部类:
匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口