ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Java+Swing+Mysql学生成绩管理系统(DAY 7)添加按钮事件处理

2021-11-09 22:01:00  阅读:121  来源: 互联网

标签:事件处理 Java import userNameLabel SpringLayout spLayout Swing centerPanel new


在这里插入图片描述

小技巧

抽取代码块
选择需要抽取的代码块->鼠标右键->Refactor->Extract Method
在这里插入图片描述

LoginViewTest类

package com.test;

import handler.LoginHandler;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;

public class LoginViewTest extends JFrame {

    JLabel titleNameLabel=new JLabel("学生成绩管理系统",JLabel.CENTER);

    SpringLayout spLayout=new SpringLayout();
    JPanel centerPanel=new JPanel(spLayout);

    JLabel userNameLabel=new JLabel("用户名:");
    JLabel userPwdLabel=new JLabel("登录密码:");

    JTextField nameTxd=new JTextField();
    JPasswordField pwdFiled=new  JPasswordField();

    JButton loginBtn=new JButton("登录");
    JButton resetBtn=new JButton("重置");

    //声明桌面系统托盘SystemTray
    SystemTray systemTray;
    TrayIcon trayIcon;
    LoginHandler loginHandler;

    public LoginViewTest(){

        super("学生成绩管理系统");

        loginHandler=new LoginHandler(this);
        //获取内容面板
        Container contentPane =getContentPane();
        //设置标题的字体,格式,大小
        titleNameLabel.setFont(new Font("华文行楷",Font.PLAIN,40));
        titleNameLabel.setPreferredSize(new Dimension(0,80));
        //设置中间各个组件的字体,大小,格式
        Font centerFont=new Font("华文行楷",Font.PLAIN,20);
        userNameLabel.setFont(centerFont);
        nameTxd.setPreferredSize(new Dimension(200,30));
        userPwdLabel.setFont(centerFont);
        pwdFiled.setPreferredSize(new Dimension(200,30));
        loginBtn.setFont(centerFont);
        resetBtn.setFont(centerFont);

        contentPane.setBackground(Color.pink);

        //把组件加入到面板上
        centerPanel.add(userNameLabel);
        centerPanel.add(userPwdLabel);
        centerPanel.add(nameTxd);
        centerPanel.add(pwdFiled);
        centerPanel.add(loginBtn);
        centerPanel.add(resetBtn);

        loginBtn.addActionListener(loginHandler);//增加登录按键的事件监听
        loginBtn.addKeyListener(loginHandler);//增加键盘按键监听事件
        resetBtn.addActionListener(loginHandler);//增加重置按键的事件监听

        contentPane.add(titleNameLabel,BorderLayout.NORTH);
        contentPane.add(centerPanel,BorderLayout.CENTER);

        //设置中间组件的位置,弹簧布局
        layoutCenter();

        //判断当前系统是否支持系统托盘
        if(SystemTray.isSupported()){
            systemTray=SystemTray.getSystemTray();//初始化系统托盘
            URL imgUrl = LoginViewTest.class.getClassLoader().getResource("LoginView.jpg");
            trayIcon=new TrayIcon(new ImageIcon(imgUrl).getImage());//初始化托盘图标
            trayIcon.setImageAutoSize(true);//托盘图标可以自动缩放大小
            try {
                systemTray.add(trayIcon);//将托盘图标加入到系统托盘组件中,并抛出异常
            } catch (AWTException e) {
                e.printStackTrace();
            }
            //创建一个事件响应,最小化时销毁资源
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowIconified(WindowEvent e) {
                    LoginViewTest.this.dispose();
                }
            });

            //托盘事件监听(鼠标单击一次托盘,窗口将会正常显示)
            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    int clickCont=e.getClickCount();
                    if(clickCont==1){
                        LoginViewTest.this.setExtendedState(JFrame.NORMAL);
                    }
                    LoginViewTest.this.setVisible(true);
                }
            });
        }
        //设置loginBtn为默认按钮,按下回车键时默认响应loginBtn的键盘响应
        getRootPane().setDefaultButton(loginBtn);

        //设置窗口图片
        URL imgUrl=LoginViewTest.class.getClassLoader().getResource("LoginView.jpg");
        setIconImage(new ImageIcon(imgUrl).getImage());
        //设置窗口基本参数
        setSize(600,400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }

    private void layoutCenter() {
        //获取组件的宽度Spring.width(组件名)用户名和用户名文本框组件
        Spring titleLabelWidth=Spring.width(userNameLabel);
        Spring titleTextWidth=Spring.width(nameTxd);
        Spring spaceWidth=Spring.constant(20);//userNameLabel和nameTxd的间距
        Spring totalWidth=Spring.sum(Spring.sum(titleLabelWidth,titleTextWidth),spaceWidth);
        int offSetX=totalWidth.getValue()/2;

         /*
        SpringLayout:布局管理器
        SpringLayout.Constraints:使用弹簧布局的容器里面的组件的布局约束,每个组件对应一个
        Spring:能够进行四则运算的整数
         */
        /*
        窗口相当于一个左顶角为原点的第四象限的坐标轴

         */
        //1.设置好用户名标签的位置(约束)
        SpringLayout.Constraints titleLabelCon=spLayout.getConstraints(userNameLabel);
        //用户名标签userNameLabel的西边参考centerPanel组件水平中心点方向左偏移offSetX的距离
        spLayout.putConstraint(SpringLayout.WEST,userNameLabel,-offSetX,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        //设置用户名标签的垂直标签
        spLayout.putConstraint(SpringLayout.NORTH,userNameLabel,20,SpringLayout.NORTH,centerPanel);
        //or使用setY()设置垂直偏移量
        // titleLabelCon.setY(Spring.constant(50));//垂直偏移量

        //2.设置用户名文本框nameTxd的位置(约束)
        spLayout.putConstraint(SpringLayout.WEST,nameTxd,20,SpringLayout.EAST,userNameLabel);
        spLayout.putConstraint(SpringLayout.NORTH,nameTxd,0,SpringLayout.NORTH,userNameLabel);

        //3.设置密码标签userPwdLabel的位置
        spLayout.putConstraint(SpringLayout.NORTH,userPwdLabel,20,SpringLayout.SOUTH,userNameLabel);
        spLayout.putConstraint(SpringLayout.EAST,userPwdLabel,0,SpringLayout.EAST,userNameLabel);

        //4.设置密码文本框pwdFiled的位置(约束)
        spLayout.putConstraint(SpringLayout.WEST,pwdFiled,20,SpringLayout.EAST,userPwdLabel);
        spLayout.putConstraint(SpringLayout.NORTH,pwdFiled,0,SpringLayout.NORTH,userPwdLabel);

        //5.设置登录按钮loginBtn的位置
        spLayout.putConstraint(SpringLayout.EAST,loginBtn,-20,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        spLayout.putConstraint(SpringLayout.NORTH,loginBtn,50,SpringLayout.SOUTH,pwdFiled);

        //6.设置重置按钮resetBtn的位置
        spLayout.putConstraint(SpringLayout.WEST,resetBtn,20,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        spLayout.putConstraint(SpringLayout.NORTH,resetBtn,50,SpringLayout.SOUTH,pwdFiled);
    }

    public static void main(String[] args){
        new LoginViewTest();
    }


    public JTextField getNameTxd() {
        return nameTxd;
    }

    public JPasswordField getPwdFiled() {
        return pwdFiled;
    }
}

LoginHandler类

package handler;

import com.test.LoginViewTest;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class LoginHandler extends KeyAdapter implements ActionListener{

    private LoginViewTest loginView;
    public LoginHandler(LoginViewTest loginView){
        this.loginView=loginView;
    }


    @Override
    public void actionPerformed(ActionEvent e){
        JButton jButton=(JButton) e.getSource();
        String text=jButton.getText();
        if("重置".equals(text)){
            loginView.getNameTxd().setText("");//获取NameTxd上的用户名并置空
            loginView.getPwdFiled().setText("");//获取PwdFiled上的密码并置空
        }else if("登录".equals(text)){
            login();
        }
    }


    private void login() {
        String user=loginView.getNameTxd().getText();//获取NameTxd上的用户名
        char []chars=loginView.getPwdFiled().getPassword();//获取PwdFiled上的密码
        String pwd=new String(chars);//转为字符串型
        System.out.println(user+":"+pwd);
        //查询database,验证
        boolean flag=false;
        if(false){

        }else{
            JOptionPane.showMessageDialog(loginView,"用户名密码错误");
        }
    }

    @Override
    //键盘监听,按下回车键
    public void keyPressed(KeyEvent e) {
        if(KeyEvent.VK_ENTER==e.getKeyCode()) {
            login();
        }
    }

}

标签:事件处理,Java,import,userNameLabel,SpringLayout,spLayout,Swing,centerPanel,new
来源: https://blog.csdn.net/weixin_53463734/article/details/121237735

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有