今天是swing界面学习的第二节课,在第一节的基础上对swing的各个组件进行了深入的了解,并且把上次的那个QQ登陆界面进行了美化,直接上代码进行说明吧。
package com.why.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
public class QQLogin extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
// TODO Auto-generated method stub
QQLogin login = new QQLogin();
login.init();
}
public void init() {
// 设置窗体大小
this.setSize(new Dimension(385, 300));
// 设置窗体为不可调整大小的状态
this.setResizable(false);
// 设置窗体的布局
this.setLayout(new BorderLayout());
// 设置窗体的显示位置
this.setLocationRelativeTo(null);
// 设置船体的标题
this.setTitle("QQ");
// 设置窗体的关闭按钮点击后的响应方式
this.setDefaultCloseOperation(3);
//为了设置背景图片并且显示出来不被遮住所以不得不设置JFrame的内容窗格设置为透明
((JPanel) this.getContentPane()).setOpaque(false);
//实例化JLabel对象用于显示背景图片
ImageIcon bg = new ImageIcon("res/bg.jpg");
JLabel label = new JLabel(bg);
//添加背景图片标签
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
//设置背景标签的位置
label.setBounds(0, 0, 382, 275);
// 调用显示北边的方法,用于初始化北边要显示的组件
createNorth();
// 调用显示南边的方法,用于初始化北边要显示的组件
createSouth();
// 调用显示西边的方法,用于初始化北边要显示的组件
createWest();
// 调用显示中间的方法,用于初始化北边要显示的组件
createCenter();
// 设置窗体为可见状态
this.setVisible(true);
}
// 定义初始化北边的方法,对北边的组件初始化
private void createNorth() {
//添加这个标签不让中间的组件跑到最上面来
JLabel label = new JLabel();
label.setPreferredSize(new Dimension(378, 120));
label.setOpaque(false);
this.add(label, BorderLayout.NORTH);
}
// 定义初始化南边的方法,对南边的组件初始化
private void createSouth() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel.setOpaque(false);
// 添加多账号登陆图片
ImageIcon icon = new ImageIcon("res/a.jpg");
JLabel labelM = new JLabel(icon);
panel.add(labelM);
//因为使用的是流式布局所以添加的组件必定会挨在一起所以添加这个以达到不让组件挨着的目的
JLabel jl1 = new JLabel();
jl1.setPreferredSize(new Dimension(65, 30));
panel.add(jl1);
// 添加登陆按钮
JButton login = new JButton("登陆");
login.setPreferredSize(new Dimension(156, 35));
panel.add(login);
//因为使用的是流式布局所以添加的组件必定会挨在一起所以添加这个以达到不让组件挨着的目的
JLabel jl2 = new JLabel();
jl2.setPreferredSize(new Dimension(55, 30));
panel.add(jl2);
// 添加二维码登陆图片
ImageIcon image = new ImageIcon("res/b.jpg");
JLabel label = new JLabel(image);
panel.add(label);
this.add(panel, BorderLayout.SOUTH);
}
// 定义初始化西边的方法,对西边的组件初始化
private void createWest() {
// 实例化一个JPanel容器用于放置头像图片
JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
panel.setOpaque(false);
// 实例化一个ImageIcon对象用于实例化一个JLabel对象放置头像图片
ImageIcon icon = new ImageIcon("res/head.jpg");
JLabel label = new JLabel(icon);
panel.add(label);
// 设置panel的大小
panel.setPreferredSize(new Dimension(100, 0));
this.add(panel, BorderLayout.WEST);
}
// 定义初始化中间的方法,对中间的组件初始化
private void createCenter() {
// 实例化一个JPanel容器用于放置中间要显示的元素组件
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5));
panel.setOpaque(false);
// 定义JChomboBox所需的下拉列表的内容
String[] name = new String[] { "1378681713", "1238921432", "3382953294", "4853243489" };
JComboBox<String> username = new JComboBox<String>(name);
// 设置用户名输入框的大小
username.setPreferredSize(new Dimension(187, 25));
// 设置JComboBox为可编辑状态
username.setEditable(true);
panel.add(username);
// 添加注册密码文本
JLabel labelReg = new JLabel("注册账号");
//设置文字的颜色
labelReg.setForeground(Color.BLUE);
panel.add(labelReg);
// 添加密码输入框
JPasswordField password = new JPasswordField();
password.setPreferredSize(new Dimension(187, 25));
panel.add(password);
// 添加找回密码文本
JLabel labelFindpwd = new JLabel("找回密码");
//设置文字的颜色
labelFindpwd.setForeground(Color.BLUE);
panel.add(labelFindpwd);
// 添加记住密码复选框
JCheckBox remPwd = new JCheckBox("记住密码");
//设置文字的颜色
remPwd.setForeground(Color.BLUE);
//设置该组件透明不让其遮住背景图片
remPwd.setOpaque(false);
panel.add(remPwd);
// 添加自动登陆复选框
JCheckBox autoLogin = new JCheckBox("自动登陆");
//设置文字的颜色
autoLogin.setForeground(Color.BLUE);
//设置该组件透明不让其遮住背景图片
autoLogin.setOpaque(false);
panel.add(autoLogin);
this.add(panel, BorderLayout.CENTER);
}
}
下面是我的运行的效果,我自己感觉还行