界面开发步骤:
导入开发包:
java.awt
早期的界面开发包,样式老旧,功能不全
其中 颜色 尺寸 字体 布局 等类都可以继续使用
javax.swing
升级之后的界面开发包 都可以使用
创建一个类和方法(设置窗体和组件对象)
具体设置步骤:
创建一个窗体对象 - JFrame
设置窗体对象的相关属性
创建流式布局对象
创建组件对象、按钮、输入框、标签等
设置组件对象的属性以及内容
将组件一一添加到窗体对象中去
可视化
创建一个主函数,在主函数中 创建LoginUI 对象调用 initUI()方法
package myplace;
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import java.util.Scanner;
public class LoginUI {
//按钮监听器
LoginListener loginl=new LoginListener();
public void initUI() {
//创建窗体
JFrame jf=new JFrame();
jf.setTitle("登录界面");
jf.setSize(500,700);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭选项
//设置布局管理方式:流式布局表示从左至右依次摆放,一行不够就切换下一行,整体居中
FlowLayout flow=new FlowLayout();
jf.setLayout(flow);
//创建组件对象 按钮(JButton) 标签(JLable)输入框(JTextField/JPasswordField)
JButton btn=new JButton();
JButton btnR=new JButton();
JLabel nameJla=new JLabel();
JLabel pwdJla=new JLabel();
JTextField nameIn=new JTextField();
JPasswordField pwdIn=new JPasswordField();
ImageIcon img=new ImageIcon("images/cat2.jpg");//图片不是组件不能直接放在窗体上,必须放在按钮或标签等组件上,将组件放在窗体上
JLabel imgJla=new JLabel();
imgJla.setIcon(img);
btn.setText("登录");
btnR.setText("注册");
nameJla.setText("账号:");
pwdJla.setText("密码:");
Dimension dim=new Dimension();
dim.setSize(410,35);//输入框的尺寸
nameIn.setPreferredSize(dim);//在流式布局下设置尺寸必须使用该方法,表示高宽随窗口动态变化
pwdIn.setPreferredSize(dim);
//加载组件到窗体上
jf.add(imgJla);
jf.add(nameJla);
jf.add(nameIn);
jf.add(pwdJla);
jf.add(pwdIn);
jf.add(btn);
jf.add(btnR);
jf.setVisible(true);
//按钮监听
btn.addActionListener(loginl);
btnR.addActionListener(loginl);
//对象传递
loginl.setInput(nameIn, pwdIn);
loginl.setLoginUI(this);//this是LoginUI
}
//注册界面(和登录界面设置类似)
public void initRegisterUI() {
JFrame jf=new JFrame();
jf.setTitle("注册界面");
jf.setSize(500,700);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flow=new FlowLayout();
jf.setLayout(flow);
JButton btn=new JButton();
JLabel nameJla=new JLabel();
JLabel pwdJla=new JLabel();
JTextField nameIn=new JTextField();
JTextField pwdIn=new JTextField();
ImageIcon img=new ImageIcon("images/cat2.jpg");
JLabel imgJla=new JLabel();
imgJla.setIcon(img);
btn.setText("确定");
nameJla.setText("账号:");
pwdJla.setText("密码:");
Dimension dim=new Dimension();
dim.setSize(410,35);
nameIn.setPreferredSize(dim);
pwdIn.setPreferredSize(dim);
jf.add(imgJla);
jf.add(nameJla);
jf.add(nameIn);
jf.add(pwdJla);
jf.add(pwdIn);
jf.add(btn);
jf.setVisible(true);
//添加监听器
btn.addActionListener(loginl);
//传值
loginl.setRegistInput(nameIn,pwdIn);
}
public static void main(String[] args) {
LoginUI loginui=new LoginUI();
loginui.initUI();
//不用创建注册界面对象,因为注册界面是按登录界面上的注册按钮触发的,需要监听
}
}
按钮监听器的实现步骤
1:创建一个类 实现 ActioinListener动作监听器
2: 打开ActionListener 的源码 将其中的方法复制到这个类中
3: 在方法中加入点击按钮之后要执行的代码
4: 将写好的类拿到按钮对象所在的位置创建一个对象
5: 按钮对象通过调用 addActionListener 方法添加监听器对象
package myplace;
import java.awt.event.ActionListener;
import java.util.HashMap;
import javax.swing.*;
import java.awt.event.ActionEvent;
//接口的目的就是抽象方法,以方法进行分类
public class LoginListener implements ActionListener{
LoginUI loginui;
JTextField nameIn2;
JPasswordField pwdIn2;
JTextField nameInR;
JTextField pwdInR;
public void setLoginUI(LoginUI loginui) {
this.loginui=loginui;
}
//登录界面传递账号和密码
public void setInput(JTextField nameIn2,JPasswordField pwdIn2) {
this.nameIn2=nameIn2;
this.pwdIn2=pwdIn2;
}
//注册界面传递账号和密码
public void setRegistInput(JTextField nameInR,JTextField pwdInR) {
this.nameInR=nameInR;
this.pwdInR=pwdInR;
}
//存储账号密码
HashMap<String,String>userInfo=new HashMap<>();
public void actionPerformed(ActionEvent e) {
String action=e.getActionCommand();
//如果按下登录
if(action.equals("登录")){
String name=nameIn2.getText();
String pwd=pwdIn2.getText();
System.out.println("欢迎用户"+name+"登录");
//获取该用户名对应的密码
String getpwd=userInfo.get(name);
//如果密码存在
if(getpwd!=null) {
if(getpwd.equals(pwd)) {
System.out.println("登录成功");
}else {
System.out.println("用户名和密码不匹配");
}
//如果密码不存在
}else {
System.out.println("请先注册!");
}
}
if(action.equals("注册")) {
//按下注册按钮,会调用loginui对象的创建注册界面方法
loginui.initRegisterUI();
}
if(action.equals("确定")) {
String name=nameInR.getText();
String pwd=pwdInR.getText();
if (userInfo.get(name)!=null) {
System.out.println("用户"+name+"已经注册过!");
return;
}
userInfo.put(name, pwd);
System.out.println ("用户名:" + name + "-- 密码:" + pwd+"注册成功");
}
}
}
实现:
![](https://i-blog.csdnimg.cn/blog_migrate/de6cb18f8976e3978241420b2855b3fc.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/7427f0d0e55dfc67aa9e80b987426c7a.jpeg)