[JAVA Swing] 用户登录界面 (3)
作者:互联网
最后,只需要为按钮绑定动作命令和添加监听,为文本框添加限制方法,还有加上弹窗。
完整的实现代码如下:
两个窗口类:
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