前段時間學習了圖形用戶界面,博客一直沒時間寫,現在補上。
一、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登錄界面就完成了,至於後面其它功能的實現則需要進一步的學習,敬請期待!