ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[JAVA Swing] 用户登录界面 (3)

2021-03-07 21:35:09  阅读:151  来源: 互联网

标签:Lfr 界面 Swing public add static new import JAVA


[JAVA Swing] 用户登录界面 (1)

[JAVA Swing] 用户登录界面 (2)

 

最后,只需要为按钮绑定动作命令和添加监听,为文本框添加限制方法,还有加上弹窗。

完整的实现代码如下:

两个窗口类:

package login;

import java.awt.FlowLayout;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Lfr {
    
    //定义动作命令
    public static final String COMMAND_SIGNINBTN = "Signinbtn";
    public static final String COMMAND_REGISTER = "register";
    public static final String COMMAND_RESET = "reset";
    
    //公共静态主登陆界面框
    public static JFrame frame = new JFrame("登录界面");
    //登陆界面组件
    public static JLabel label1 = new JLabel("用户名");       
    public static JTextField username = new JTextField(10);
    public static JLabel label2 = new JLabel("密   码");
    public static JPasswordField password = new JPasswordField(10);
    public static JButton Signinbtn = new JButton("登录");
    public static JButton registerbtn = new JButton("注册");
    public static JButton resetbtn = new JButton("重置");
    //构造函数,创建以及初始化窗口
    public Lfr() {
        
        //设置窗口大小
        frame.setSize(350, 200);
        //设置按下右上角X号后关闭
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //调用函数初始化窗体的组件
        initFrame();
        //窗口居中
        frame.setLocationRelativeTo(null);
        //窗口可见
        frame.setVisible(true);
    }
    
    public void initFrame() {
        //定义面板封装文本框和标签
        JPanel panel01 = new JPanel(new FlowLayout(FlowLayout.CENTER));  //居中面板
        panel01.add(label1);
        //为文本框添加一个限制输入字数的方法
        username.setDocument(new TxDocument(10));
        panel01.add(username);

        JPanel panel02 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        panel02.add(label2);
        password.setDocument(new TxDocument(15));
        panel02.add(password);

        //定义面板封装按钮
        JPanel panel03 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        //按钮绑定动作命令
        Signinbtn.setActionCommand(COMMAND_SIGNINBTN);
        //为按钮添加一个动作监听
        Signinbtn.addActionListener(new Btlistener());
        panel03.add(Signinbtn);
        
        registerbtn.setActionCommand(COMMAND_REGISTER);
        registerbtn.addActionListener(new Btlistener());
        panel03.add(registerbtn);
        
        resetbtn.setActionCommand(COMMAND_RESET);
        resetbtn.addActionListener(new Btlistener());
        panel03.add(resetbtn);
        
        //箱式布局装入三个面板
        Box vBox = Box.createVerticalBox(); 
        vBox.add(panel01);
        vBox.add(panel02);
        vBox.add(panel03);
        
        //将布局置入窗口
        frame.setContentPane(vBox);
    }
    
    public static void main(String[] args) {
        new Lfr();
        }

}
package login;

import java.awt.FlowLayout;
import java.awt.Rectangle;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

public class Rfr {
    
    public static final String COMMAND_RREGISTER = "rregister";
    
    public static JFrame frame2 = new JFrame("注册界面");
    public static JLabel label3 = new JLabel("确认密码");
    public static JPasswordField conpassword = new JPasswordField(8);
    public static JButton rregisterbtn = new JButton("注册");
    
    public Rfr() {
        
        //设置窗口大小
        frame2.setSize(350, 200);
        //设置按下右上角X号后关闭
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //调用函数初始化窗体的组件
        initFrame2();
        //新窗口与旧窗口错开50像素。
        frame2.setBounds(
                new Rectangle(
                        (int) Lfr.frame.getBounds().getX()+ 50,
                        (int) Lfr.frame.getBounds().getY() + 50, 
                        (int) Lfr.frame.getBounds().getWidth(), 
                        (int) Lfr.frame.getBounds().getHeight()
                ));
        //窗口可见
        frame2.setVisible(true);
    }

    public void initFrame2() {
        
        JPanel panel11 = new JPanel();
        panel11.add(Lfr.label1);
        panel11.add(Lfr.username);
        
        JPanel panel12 = new JPanel();
        panel12.add(Lfr.label2);
        panel12.add(Lfr.password);
        
        JPanel panel13 = new JPanel();
        panel13.add(label3);
        conpassword.setDocument(new TxDocument(15));
        panel13.add(conpassword);
        
        JPanel panel14 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        rregisterbtn.setActionCommand(COMMAND_RREGISTER); 
        rregisterbtn.addActionListener(new Btlistener());
        panel14.add(rregisterbtn);
        panel14.add(Lfr.resetbtn);
        
        Box vBox = Box.createVerticalBox(); 
        vBox.add(panel11);
        vBox.add(panel12);
        vBox.add(panel13);
        vBox.add(panel14);
        
        frame2.setContentPane(vBox);
    }
    public static void register() {
        new Rfr();
        }

}

功能类(按钮监听、文本限制)

package login;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

public class Btlistener implements ActionListener{

    
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String command = e.getActionCommand();
        
        //按下登录按钮
        if (Lfr.COMMAND_SIGNINBTN.equals(command)) {
            //弹出登录对话框
            Opane.loginOK();
            }
        //按下注册页面的注册按钮
        else if (Rfr.COMMAND_RREGISTER.equals(command)) {
            //弹出注册对话框
            if(Arrays.equals(Rfr.conpassword.getPassword(), Lfr.password.getPassword())) {
                Opane.registerOK();
            }
            else {
                Opane.registerWrong();
            }
        }
        //按下重置按钮
        else if (Lfr.COMMAND_RESET.equals(command)) {
            //删除所有文本框的文字
            Lfr.username.setText("");
            Lfr.password.setText("");
            Rfr.conpassword.setText("");
            //设置光标位置
            Lfr.username.requestFocus();  
        }
        //按下登录界面的注册按钮
        else if (Lfr.COMMAND_REGISTER.equals(command)) {
            //弹出注册界面
            Rfr.register();
        }
    }
}
package login;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class TxDocument extends PlainDocument{

    private static final long serialVersionUID = 1L;
    int maxLength;

    //有参构造,参数为文本框输入字符最大长度
    public TxDocument(int newMaxLength) {
        super();
        maxLength = newMaxLength;
        }
    
    @Override
    public void insertString(int offset,String str, AttributeSet a) throws BadLocationException{
        //字数超出范围
        if (getLength() + str.length() > maxLength) {
            return;
            }
        //字数在范围内
        else{
            //调用父级方法插入字符
            super.insertString(offset, str, a);
        }
    }
}

弹窗类

package login;

import javax.swing.JOptionPane;

public class Opane {
    
    public static void registerOK() {
        JOptionPane.showMessageDialog(
                Rfr.frame2,
                "注册成功",
                "提示",
                JOptionPane.WARNING_MESSAGE
                );
    }

    public static void registerWrong() {
        JOptionPane.showMessageDialog(
                Rfr.frame2,
                "两次密码不一致",
                "提示",
                JOptionPane.WARNING_MESSAGE
                );
    }
    
    public static void loginOK() {
        JOptionPane.showMessageDialog(
                Lfr.frame,
                "登录成功",
                "提示",
                JOptionPane.WARNING_MESSAGE
                );
    }
}

总结一下:这个登录界面设计还是有些许检测功能不完善,而且不能保存用户数据,理解到Swing基本的常用组件就差不多了:)

标签:Lfr,界面,Swing,public,add,static,new,import,JAVA
来源: https://www.cnblogs.com/masahiko/p/14496511.html

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

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

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

ICode9版权所有