Java之QQ界面实现
##1.创建QQ登录窗口,并添加布局管理器
QQLogin.java
import java.awt.*;
import javax.swing.*;
public class QQLogin{
//1.为QQ登录界面整体初始化一个JFrame窗口
private static JFrame jf=new JFrame();
public static void initLogin(){
//QQ登录窗口初始化方法
jf.setSize(426,300);//设置窗口尺寸
jf.setLocation(497,242);//设置窗口在屏幕显示位置
jf.setUndecorated(true);//设置JFrame窗口边框不显示
jf.setResizable(false);//禁止改变窗口大小
BorderLayout border_layout=new BorderLayout();
jf.setLayout(border_layout);
//创建并加入顶部面板
JPanel panel_north=CreatePanel.CreateNorthPanel(jf);
jf.add(panel_north,BorderLayout.PAGE_START);
//创建并加入中部面板
JPanel panel_center=CreatePanel.CrateCenterPanel(jf);
jf.add(panel_center,BorderLayout.CENTER);
//创建并加入左侧面板
JPanel panel_west=CreatePanel.CreateWestPanel();
jf.add(panel_west,BorderLayout.LINE_START);
//创建并加入底部面板
JPanel panel_south=CreatePanel.CreateSouthPanel();
jf.add(panel_south,BorderLayout.PAGE_END);
//创建并加入右侧面板
JPanel panel_east=CreatePanel.CrateEastPanel();
jf.add(panel_east,BorderLayout.LINE_END);
jf.setVisible(true);//设置窗口可见
}
public static void main(String[]args){
SwingUtilities.invokeLater(QQLogin::initLogin);
}
}
##2.创建区域面板类 划分容器区域
CreatePanel.java
import java.awt.*;
import javax.swing.*;
public class CreatePanel {
private static LoginListener ll=null;
//顶部面板区域
public static JPanel CreateNorthPanel(JFrame jf){
//创建一个JPanel顶部面板
JPanel panel=new JPanel();
//取消面板内默认布局
panel.setLayout(null);
//设置顶部面板尺寸
panel.setPreferredSize(new Dimension(0,140));
//向顶部面板添加背景图片
ImageIcon image=new ImageIcon("images/back.jpg");
JLabel background=new JLabel(image);
//设置背景图片的位置和尺寸
background.setBounds(0,0,426, image.getIconHeight());
panel.add(background);
//在顶部JPanel面板右上角添加一个退出按钮
JButton out=new JButton(new ImageIcon("images/close_normal.jpg"));
out.setBounds(403,0,26,26);
//设置鼠标移动到退出按钮时更改图片
out.setRolloverIcon(new ImageIcon("images/close_hover.jpg"));
//取消按钮边框效果
out.setBorderPainted(false);
panel.add(out);
//为退出按钮注册监听器,用来关闭窗口
out.addActionListener(event->jf.dispose());
return panel;
}
//左侧面板区域
public static JPanel CreateWestPanel(){
//创建一个JPanel左侧面板
JPanel panel=new JPanel();
panel.setLayout(null);
panel.setPreferredSize(new Dimension(130,0));
//向左侧面板添加背景图片
ImageIcon image=new ImageIcon("images/qq.jpg");
JLabel background=new JLabel(image);
background.setBounds(0, 0, 120, 110);
panel.add(background);
return panel;
}
//中部面板区域
public static JPanel CrateCenterPanel(JFrame jf){
//创建一个JPanel中部面板
JPanel panel=new JPanel();
panel.setLayout(null);
//创建一个JcomboBox下拉框组件,并初始化QQ账号
String str[]={"123456789","987654321","1314520888"};
JComboBox<Object> jcoCenter=new JComboBox<Object>(str);
panel.add(jcoCenter);
//设置下拉框编辑
jcoCenter.setEditable(true);
jcoCenter.setBounds(0, 15, 175, 30);
//设置下拉框内容字体
jcoCenter.setFont(new Font("Calibrl",0,13));
//创建一个JPsswordField密码框组件
JPasswordField jpaCenter=new JPasswordField();
//设置密码框面板为FlowLayout
jpaCenter.setLayout(new FlowLayout(FlowLayout.RIGHT,0,0));
jpaCenter.setBounds(0, 44, 175, 30);
jpaCenter.setPreferredSize(new Dimension(185,25));
panel.add(jpaCenter);
//创建ImageIcon小键盘组件,并加入到密码框组件中
ImageIcon image=new ImageIcon("images/keyboard.jpg");
JButton jbu=new JButton(image);
jbu.setPreferredSize(new Dimension(22,20));
jbu.setBorderPainted(false);
jpaCenter.add(jbu);
//创建两个JChenckBox多选框组件
JCheckBox jch1=new JCheckBox("记住密码");
//设置选中时不显示边框
jch1.setFocusPainted(false);
jch1.setFont(new Font("宋体",0,13));
jch1.setBounds(0, 85, 80, 20);
panel.add(jch1);
JCheckBox jch2=new JCheckBox("自动登录");
jch2.setFocusPainted(false);
jch2.setFont(new Font("宋体",0,13));
jch2.setBounds(100, 85, 80, 20);
panel.add(jch2);
//在中部面板初始化登录监听器,封装账号和密码
ll=new LoginListener(jcoCenter,jpaCenter,jf);
return panel;
}
//右侧面板区域
public static JPanel CrateEastPanel(){
//创建一个Jpanel右侧面板
JPanel panel=new JPanel();
panel.setLayout(null);
panel.setPreferredSize(new Dimension(100,0));
//创建两个JLabel标签组件
JLabel regeist=new JLabel("注册账号");
regeist.setForeground(new Color(100,149,238));
regeist.setBounds(0,13,60,30);
regeist.setFont(new Font("宋体",0,12));
//创建一个Jpanel右侧面板
JLabel regetpwd=new JLabel("找回密码");
regetpwd.setForeground(new Color(100,149,238));
regetpwd.setBounds(0,43,60,30);
regetpwd.setFont(new Font("宋体",0,12));
panel.add(regetpwd);
panel.add(regeist);
return panel;
}
//底部面板区域
public static JPanel CreateSouthPanel(){
//床一个JPanel底部面板
JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(0,51));
panel.setLayout(null);
//创建左下角多人登录图标组件
JButton jble=new JButton(
new ImageIcon("images/single_normal.jpg"));
jble.setPreferredSize(new Dimension(40,40));
jble.setFocusPainted(false);
jble.setRolloverIcon(new ImageIcon("images/single_down.jpg"));
jble.setBorderPainted(false);
//设置不显示按钮区域
jble.setContentAreaFilled(false);
jble.setBounds(0,10,40,40);
jble.setToolTipText("多账号登录");
//创建底部中间登录图标组件
ImageIcon image=new ImageIcon("images/login_normal.jpg");
JButton jb=new JButton("登 录",image);
jb.setFont(new Font("宋体",0,13));
jb.setBounds(130,0,175,40);
//将文字放在图片中间
jb.setHorizontalTextPosition(SwingConstants.CENTER);
jb.setFocusPainted(false);
jb.setContentAreaFilled(false);
jb.setBorderPainted(false);
jb.setRolloverIcon(new ImageIcon("images/lohin_hover.jpg"));
//创建右下角二维码登录图标组件
JButton jbri=new JButton(new ImageIcon("images/right_normal.jpg"));
jbri.setBounds(380,10,40,40);
jbri.setFocusPainted(false);
jbri.setBorderPainted(false);
jbri.setContentAreaFilled(false);
jbri.setRolloverIcon(new ImageIcon("images/right_hover.jpg"));
jbri.setToolTipText("二维码登录");
//将底部3 个组件添加到底部JPanel面板中
panel.add(jble);
panel.add(jb);
panel.add(jbri);
//为登录按钮注册监听器,后台检测QQ账号,密码是否正确
jb.addActionListener(ll);
return panel;
}
}
##3.创建并注册监听器
LoginListener.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LoginListener implements ActionListener{
private JComboBox<Object>jco;//用来获取QQ账号的对象
private JPasswordField jpa;//用来获取QQ密码的对象
private JFrame jf;
public LoginListener(JComboBox<Object>jco,JPasswordField jpa,JFrame jf) {
super();
this.jco=jco;
this.jpa=jpa;
this.jf=jf;
}
public void actionPerformed(ActionEvent e) {
// 1.获取登录的账号和密码
String name=(String)jco.getSelectedItem();
String pwd=new String(jpa.getPassword());
//2.判断输入的账号和密码是否正确
if(name.equals("123456789")&& pwd.equals("123")){
//账号正确,先关闭当前JFrame登录窗口
jf.dispose();
//模拟显示登录成功后的QQ窗口
JFrame jfn=new JFrame();
jfn.setSize(289,687);
jfn.setLocation(800,100);
jfn.setUndecorated(true);
jfn.setResizable(true);
jfn.setVisible(true);
//为QQ显示窗口添加背景图片和退出按钮组件
JPanel panel=new JPanel();
panel.setLayout(null);
panel.setPreferredSize(new Dimension(0,140));
ImageIcon image=new ImageIcon("images/qqSuccess.jpg");
JLabel background=new JLabel(image);
background.setBounds(0,0,289,687);
panel.add(background);
//添加退出按钮
JButton out=new JButton(new ImageIcon("images/close2_normal.jpg"));
out.setBounds(265,0,26,26);
out.setRolloverIcon(new ImageIcon("images/close2_hover.jpg"));
out.setBorderPainted(false);
panel.add(out);
jfn.add(panel);
//为退出按钮注册监听器,关闭当前窗口
out.addActionListener(event->jfn.dispose());
}else{
//QQ账号或密码输入错误,弹出提示信息
JOptionPane.showMessageDialog(null,
"你输入的账户名或密码不正确,请重新输入!");
}
}
}