1.登录界面所需要的API类:
(1)组件类(javax.swing.):
顶级容器:JFrame
图片:ImageIcon
标签:JLable
按钮:JButton
输入框:JTextField
复选框:JCheckBox
密码输入框:JPasswordField
(2)元素类(java.awt.)
尺寸:Dimension
流式布局器:FlowLayout(从左到右摆放组件,直到占据一行所有的空间再移动下一行。默认情况下,组件在每一行都居中排列)
2.设计思路:
qq登录界面上半部分可用一张图片,图片不可直接放在顶级容器上,应先放在标签上,而后将标签放入顶级容器。而下半部分大体是帐号密码标签及其文本框。再往下则是自动登录、记住密码标签及其复选框,以及忘记密码和登录按钮。
3.代码实现:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Insets;
import java.awt.Color;
public class QQUI {
public static void main(String []args){
QQUI login = new QQUI();
login.Show_loginUI();
}
public void Show_loginUI(){
//实例化顶级容器JFrame(窗体框架)
JFrame qq_login = new JFrame();
//设置标题
qq_login.setTitle("QQ");
//设置尺寸
qq_login.setSize(426,330);
//设置背景色
qq_login.setBackground(Color.blue);//设置了JFrame的背景色,但直接看到并不是JFrame,而是ContentPane
qq_login.getContentPane().setBackground(Color.white);
qq_login.getContentPane().setVisible(true);//如果改为false那么就变成了蓝色。
//设置程序关闭,3=JFrame.EXIT_ON_CLOSE
qq_login.setDefaultCloseOperation(3);
//实例化流式布局
FlowLayout qq_FL = new FlowLayout();
//设置布局器
qq_login.setLayout(qq_FL);
//添加背景图片
//相对路径与src同级的目录Image 所以使用./访问
ImageIcon qq_login_image = new ImageIcon("./Image/login.png");
//将图片添加到标签上
JLabel qq_login_image_label = new JLabel(qq_login_image);
//添加帐号密码标签
JLabel UID_label = new JLabel("帐号:");
JLabel PWD_label = new JLabel("密码:");
//添加帐号密码输入框
JTextField UID_text = new JTextField();
JPasswordField PWD_text = new JPasswordField();
//输入框尺寸设置
Dimension text = new Dimension(340,30);
UID_text.setPreferredSize(text);
PWD_text.setPreferredSize(text);
//添加按钮
JButton login_check = new JButton("登录");
JButton pwd_retrieve = new JButton("找回密码");
//透明化“找回密码”按钮
Insets around = new Insets(0,0,0,0);
pwd_retrieve.setMargin(around);//将边框外的上左下右空间设置为0
pwd_retrieve.setIconTextGap(0);//将标签中显示的文本和图标之间的间隔量设置为0
pwd_retrieve.setBorderPainted(false);//不打印最外边框
pwd_retrieve.setBorder(null);//除去边框
// pwd_retrieve.setText(null);//除去按钮上文字
pwd_retrieve.setFocusPainted(false);//除去焦点的框
pwd_retrieve.setContentAreaFilled(false);//除去默认的背景填充
//修改“登录”按钮
login_check.setBackground(new Color(7,186,253));
login_check.setBorderPainted(false);
login_check.setForeground(Color.white);//字体颜色
Dimension login_button_size = new Dimension(235,35);
login_check.setPreferredSize(login_button_size);
login_check.setFont( new Font("黑体",Font.BOLD,16));//此方法将使应用程序加载变慢
//添加复选框
JCheckBox login_automatically = new JCheckBox();
JCheckBox pwd_remember = new JCheckBox();
//添加复选框相应标签
JLabel login_auto_label = new JLabel("自动登录");
JLabel pwd_remember_label = new JLabel("记住密码");
//添加空白标签
JLabel blank_1 = new JLabel(" ");
Dimension blank_1_dimension = new Dimension(60,30);
blank_1.setPreferredSize(blank_1_dimension);
JLabel blank_2 = new JLabel(" ");
Dimension blank_2_dimension = new Dimension(58,30);
blank_2.setPreferredSize(blank_2_dimension);
//将组件及元素添加至窗体
qq_login.add(qq_login_image_label);
qq_login.add(UID_label);
qq_login.add(UID_text);
qq_login.add(PWD_label);
qq_login.add(PWD_text);
qq_login.add(blank_1);
qq_login.add(login_automatically);
qq_login.add(login_auto_label);
qq_login.add(pwd_remember);
qq_login.add(pwd_remember_label);
qq_login.add(pwd_retrieve);
qq_login.add(blank_2);
qq_login.add(login_check);
//显示
qq_login.setVisible(true);
}
}
4.事件与接口的加入:
(1)自定义一个 监听器类 去 implements ActionListener 接口
(2)在监听器类中定义 文本输入框的属性,用以传参,获得输入框中文本
(3)重写动作监听器中的抽象方法(双击动作监听器ActionListener,然后按F3键,将其方法复制到自定义类中进行重写)
(4)输入框对象.getText(); 取到字符串
(5)"".equals() 比较字符串 验证登录
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login_listener implements ActionListener {
JTextField UID;
JTextField PWD;
public void actionPerformed(ActionEvent e){
if (UID.getText().equals("10001")&&PWD.getText().equals("MHT")){
System.out.println(UID.getText()+"登录成功");
}
else{
System.out.println(UID.getText()+"帐号或密码错误");
}
}
}
(6)给组件添加动作监听器 addActionListener(实现了动作监听器接口的类的对象);
(7)在界面类中用监听器的对象调用输入框属性 = 输入框对象 //赋值
//给“登录”按钮添加监听器 (1)实例化实现了(ActionListener)接口的类的对象(2)添加对象(3)传参
Login_listener loginlistener = new Login_listener();
login_check.addActionListener(loginlistener);
loginlistener.UID = UID_text;
loginlistener.PWD = PWD_text;
QQ_PWD_retrieve pwd_retrieve_listener = new QQ_PWD_retrieve();
pwd_retrieve.addActionListener(pwd_retrieve_listener);
pwd_retrieve_listener.UID = UID_text;
此外,还对界面进行了小小的修改
(1)将窗体大小固定
(2)将窗体位置固定
//设置窗体居中
qq_login.setLocationRelativeTo(null);
//设置窗体大小不可改变
qq_login.setResizable(false);
5.效果演示:
界面出现在屏幕正中间,整体与qq界面相似
帐号与密码匹配则登录成功
帐号与密码不匹配则显示错误
点击“找回密码”则显示申请找回密码