前段时间学习了图形用户界面,博客一直没时间写,现在补上。
一、AWT与Swing
我们知道,java针对GUI设计提供了丰富的类库,而这些类均位于AWT和Swing这两个包中。
AWT(Abstract Window ToolKit 抽象窗口工具包):SUN公司最早推出的一套API,需要调用本地系统方法实现功能,属重量级控件。
Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
二、AWT继承体系
AWT中组建可分为两个大类,分别为Component和MenuComponent。
MenuComponent:是所有与菜单相关组件的父类;
Component:除菜单外,其它AWT组件的父类,通常被称为组件,根据作用不同分为基本组件和容器组件。
基本组件:诸如按钮、文本框之类的图形界面元素,是可以使用的组件,但是必须依赖容器。
容器组件:是可以存储基本组件和容器组件的组件。
注:图片来源于《Java基础入门》
三、事件监听机制
事件源(组件):事件发生的场所,通常就是产生事件的组件;
监听器(Listener):负责监听事件源上发生的的事件,并对各种事件作出相应处理的对象(对象中包含事件处理器);
事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作);
事件处理器:监听器对象对接收的事件对象进行相应处理的方法。
四、QQ登录界面设计
实现要求:
1、仿QQ登录界面设计;
2、添加背景图片;
3、添加文本框、按钮、复选框等功能组件;
4、实现帐号密码验证;
5,验证成功弹出”欢迎登录“界面,失败提醒”帐号密码错误“。
具体代码如下:
QQ登录主界面设计
package com.Liao.Login0626;
public class Login {
public static void main(String[] args) {
Login log=new Login();
log.showFrame();
}
public void showFrame(){
//构造一个窗体
javax.swing.JFrame frame=new javax.swing.JFrame();
//设置标题
frame.setTitle("qq");
//设置窗体大小
frame.setSize(360, 450);
//设置窗体居中
frame.setLocationRelativeTo(null);
//设置退出方式
frame.setDefaultCloseOperation(3);
//窗体布局格式(流式布局管理器)
java.awt.FlowLayout fl=new java.awt.FlowLayout();
frame.setLayout(fl);
//添加图片
javax.swing.ImageIcon icon=new javax.swing.ImageIcon("D:\\develop\\0.jpg");
//添加标签
javax.swing.JLabel jla=new javax.swing.JLabel(icon);
frame.add(jla);
//添加文本框
javax.swing.JTextField jta_name1=new javax.swing.JTextField();
//设置文本框大小
java.awt.Dimension d1=new java.awt.Dimension(200,30);
jta_name1.setPreferredSize(d1);
//将文本框加至窗口
frame.add(jta_name1);
//创建按钮
javax.swing.JButton bu_register=new javax.swing.JButton("注册帐号");
java.awt.Dimension d2=new java.awt.Dimension(100,30);
bu_register.setPreferredSize(d2);
frame.add(bu_register);
//添加文本框
javax.swing.JTextField jta_name2=new javax.swing.JTextField();
java.awt.Dimension d3=new java.awt.Dimension(200,30);
jta_name2.setPreferredSize(d3);
frame.add(jta_name2);
//创建按钮
javax.swing.JButton bu_sec=new javax.swing.JButton("找回密码");
java.awt.Dimension d4=new java.awt.Dimension(100,30);
bu_sec.setPreferredSize(d4);
frame.add(bu_sec);
//记住密码复选框
javax.swing.JCheckBox jcb1=new javax.swing.JCheckBox("记住密码");
frame.add(jcb1);
//找回密码复选框
javax.swing.JCheckBox jcb2=new javax.swing.JCheckBox("找回密码");
frame.add(jcb2);
//创建按钮
javax.swing.JButton bu_login=new javax.swing.JButton("登录");
java.awt.Dimension d5=new java.awt.Dimension(300,30);
bu_login.setPreferredSize(d5);
frame.add(bu_login);
//设置窗体显示出来
frame.setVisible(true);
//创建监听器
ButtonListener bl=new ButtonListener();
//给按钮加监听器
bu_login.addActionListener(bl);
//将文本框对象及窗口对象传至按钮监听器类
bl.setJt1(jta_name1);
bl.setJt2(jta_name2);
bl.setJt3(frame);
}
}
按钮监听器
package com.Liao.Login0626;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class ButtonListener implements ActionListener {
private JFrame jf;
private JTextField jt1;
private JTextField jt2;
public void setJt3(JFrame jframe) {
jf = jframe;
}
public void setJt1(JTextField jtext) {
jt1 = jtext;
}
public void setJt2(JTextField jtext) {
jt2 = jtext;
}
public void actionPerformed(ActionEvent e) {
String name1 = jt1.getText();// 输入的帐号
String name2 = jt2.getText();// 输入的密码
//创建欢迎窗口对象
Welcome wel = new Welcome();
//设置QQ登录主界面窗口不可见
jf.setVisible(false);
//帐号密码正确弹出欢迎窗口,错误弹出确认信息
if ("123".equals(name1) && "456".equals(name2)) {
wel.show();
} else {
JOptionPane pane = new JOptionPane();
JOptionPane.showMessageDialog(pane, "帐号密码错误");
}
}
}
欢迎登录窗口界面
package com.Liao.Login0626;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class Welcome {
public void show() {
JFrame jf = new JFrame("Result");
// 设置窗体大小
jf.setSize(360, 450);
// 设置窗体居中
jf.setLocationRelativeTo(null);
// 设置退出方式
jf.setDefaultCloseOperation(3);
JLabel jl = new JLabel("欢迎登录", SwingConstants.CENTER);
jl.setFont(new Font("宋体", Font.BOLD, 30));
jf.add(jl);
jf.setVisible(true);
}
}
就这样,一个简单的QQ登录界面就完成了,至于后面其它功能的实现则需要进一步的学习,敬请期待!