Java.Swing基础篇三部曲之三(事件响应)

Java.Swing基础篇三部曲一(基础组件的认识)

Java.Swing基础篇三部曲二(布局管理)

简介

  • 事件(Event):鼠标,键盘,布局改变等等操作
  • 事件监听器(Event Listener):对这些事件做出相应的程序

事件中包含事件的信息

  1. 事件源(getSource),得到的是Object,可以强制转换成相应的类型
    if (e.getSource() == registerButton1)//如果点到了registerButton1按钮
  2. 事件具体情况,如MouseEvent的getX(),getY()得到鼠标的坐标,keyEvent的getKeychar()得到当前字符等等。
    public void mouseMoved(MouseEvent e) {
    		int x = e.getX();
    		int y = e.getY();
    		String s = "当前鼠标坐标:(" + x + ", " + y + ")";
    		MouseMove.lab.setText(s);}
    

    事件适配器

事件适配器类(Adapter)——简化实现Listener

常见的事件适配器

适配器名称用途
ComponentAdapter组件适配器
ContainerAdapter容器适配器
FocusAdapter焦点适配器
KeyAdapter键盘适配器
MouseAdapter鼠标适配器
MouseMotionAdapter鼠标运动适配器
WindowAdapter窗口适配器

代码示例

  • 鼠标适配器


import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Objects;

class FunctionRegister extends JFrame implements ActionListener {//这是点击注册按钮后需要跳转到的注册界面
    JPanel panel1;
    JLabel label1,label2, label3, label4,label5;
    JButton registerButton1, exitButton1;
    JTextField label2Field, label5Field;
    JPasswordField passwordField3, passwordField4;
    public FunctionRegister() {
        this.setTitle("天地银行注册系统");
        this.setSize(400, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel1 = new JPanel();
        label1 = new JLabel("欢迎您注册天地银行");
        label2 = new JLabel("请输入您的用户名");
        label2Field = new JTextField(16);
        label3 = new JLabel("请输入您的密码");
        passwordField3 = new JPasswordField(16);
        label4 = new JLabel("请再次确认您的密码");
        passwordField4 = new JPasswordField(16);
        label5 = new JLabel("请输入您的身份证号");
        label5Field = new JTextField(18);
        registerButton1 = new JButton("注册");
        registerButton1.addActionListener(this);
        exitButton1 = new JButton("返回");
        exitButton1.addActionListener(this);
        panel1.add(label1);
        panel1.add(label2);
        panel1.add(label2Field);
        panel1.add(label3);
        panel1.add(passwordField3);
        panel1.add(label4);
        panel1.add(passwordField4);
        panel1.add(label5);
        panel1.add(label5Field);
        panel1.add(registerButton1);
        panel1.add(exitButton1);
        this.add(panel1);
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == registerButton1) {
            if (passwordField3.getText().length() != 6) {
                JOptionPane.showMessageDialog(null, "请输入六位数作为密码");
            } else if (!Objects.equals(passwordField3.getText(), passwordField4.getText())) {
                JOptionPane.showMessageDialog(null, "两次密码前后不一致");
            } else if (label5Field.getText().length() != 18) {
                JOptionPane.showMessageDialog(null, "身份证号应该为18位");
            } else {
                JOptionPane.showMessageDialog(null,"注册成功");
            }
        }
    }
    public static void main(String []args ){
        new FunctionRegister();
    }
    }

  •  键盘适配器

import java.awt.*;
import java.awt.event.*;
class Test {
    private Frame mainFrame;
    private Label headerLabel;
    private Label statusLabel;
    private Panel controlPanel;

    public Test(){
        prepareGUI();
    }

    public static void main(String[] args){
        Test  awtAdapterDemo = new Test ();
        awtAdapterDemo.showKeyAdapterDemo();
    }

    private void prepareGUI(){
        mainFrame = new Frame("Java AWT Examples");
        mainFrame.setSize(400,400);
        mainFrame.setLayout(new GridLayout(3, 1));
        mainFrame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent windowEvent){
                System.exit(0);
            }
        });
        headerLabel = new Label();
        headerLabel.setAlignment(Label.CENTER);
        statusLabel = new Label();
        statusLabel.setAlignment(Label.CENTER);
        statusLabel.setSize(350,100);

        controlPanel = new Panel();
        controlPanel.setLayout(new FlowLayout());

        mainFrame.add(headerLabel);
        mainFrame.add(controlPanel);
        mainFrame.add(statusLabel);
        mainFrame.setVisible(true);
    }

    private void showKeyAdapterDemo(){
        headerLabel.setText("Listener in action: KeyAdapter");

        final TextField textField = new TextField(10);

        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER){
                    statusLabel.setText("Entered text: " + textField.getText());
                }
            }
        });
        Button okButton = new Button("OK");
        okButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                statusLabel.setText("Entered text: " + textField.getText());
            }
        });

        controlPanel.add(textField);
        controlPanel.add(okButton);
        mainFrame.setVisible(true);
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值