一、GUI( 用戶圖形界面 )
GUI: Graphical User Interface,圖形用戶接口,用圖形方式,來顯示計算機操作界面,方便直觀。
CLI: Command LineUser Interface,命令行用戶接口,即常見的Dos命令行操作,須記住一些命令,操作不直觀。
java爲GUI提供的對象都放在了兩個包中:java.Awt包和javax.Swing包
java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要調用本地系統方法實現功能,屬重量級控件。
javax.Swing包:在AWT的基礎上建立的一套圖形界面系統,其中提供了更多的組件,且完全由java實現,增強了移植性,屬輕量級控件。
二、繼承關係圖
Container:爲容器,是一個特殊的組件,該組件中可以通過add方法添加其他組件進來。
Container常用子類:Window Panel
Window常用子類:Frame Dialog
三、佈局管理器
常見的佈局管理器:
1、FlowLayout:流式佈局管理器。從左向右排列,是Panel默認的佈局管理器
2、BorderLayout:邊界式佈局管理器,東南西北中的排列方式,是Frame的默認佈局管理器。如果窗體中只有一個組件,將會覆蓋整個窗體。
3、GridLayout:網格式佈局管理器,規則的矩陣
4、CardLayout:卡片式佈局管理器,即選項卡
5、GridBayLayout:網格包佈局管理器,非規則矩陣
四、創建窗體界面
1、創建Frame窗體。
2、對窗體進行基本設置。
3、定義組件。
4、將組件通過窗體的add方法添加到窗體中。
5、讓窗體顯示,通過setVisible(true)。
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
class AwtDemo {
public static void main(String[] args) {
// 創建Frame窗體:
Frame f = new Frame("my Frame");
f.setSize(500, 100);// 窗體大小設置
f.setLocation(300, 150);// 窗體顯示位置設置,橫縱座標
// 也可以直接用這個方法對大小和位置設置
// f.setBounds(int x,int y,int wight,int hight);
f.setLayout(new FlowLayout());// 參數爲指定的佈局管理器
// 定義組件:
Button b = new Button("my Button");
// 將組件通過窗體的add方法添加到窗體中:
f.add(b);
// 讓窗體顯示:
f.setVisible(true);
}
}
五、事件監聽機制
1、事件源(組件):awt或swing包中的那些圖形界面組件
2、事件(Event):每一個事件源都有自己特有的對應事件和共性事件
3、監聽器(Listener):將可觸發某一事件的動作(不只一個動作),都封裝到偵聽器中。
4、事件處理:引發事件後的處理方式。
常見的事件監聽器:
1、窗體事件監聽器:WindowListener
2、Action事件監聽器:ActionListener
3、鼠標事件監聽器:MouseListener
4、鍵盤事件監聽器:KeyListener
// 在窗體中列出指定目錄內容
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyDemo {
// 全局變量的界面組件引用
private Frame f;
private Button but;
private TextField tf;
private TextArea ta;
// 構造函數
MyDemo() {
init();
}
// 窗體創建與功能實現
public void init() {
// 組件實例化
f = new Frame("my fame");
but = new Button("跳轉");
tf = new TextField(50);
ta = new TextArea(30, 58);
// 窗體基本設置
f.setBounds(300, 150, 500, 500);
f.setLayout(new FlowLayout());
// 添加組件
f.add(tf);
f.add(but);
f.add(ta);
// 窗體事件
myEvent();
// 窗體顯示
f.setVisible(true);
}
// 註冊事件
public void myEvent() {
// 窗體關閉功能
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 鼠標事件
but.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
showFile();// 顯示到文本區中
}
});
// 文本框鍵盤事件
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER)
showFile();// 將目錄下的內容顯示到文本區中
}
});
}
// 將路徑下的目錄或文件列出
private void showFile() {
String path = tf.getText();// 獲取文本框內容
File file = new File(path);// 將路徑封裝成文件對象
// 判斷是否存在
if (file.exists()) {
ta.setText("");// 清空文本區中的內容
// 如果是目錄
if (file.isDirectory()) {
String[] dir = file.list();// 列出目錄下的文件和目錄
// 遍歷
for (String name : dir) {
ta.append(name + "\r\n");// 添加到文本區中
}
} else
ta.append(file.getName());// 如果是文件,則只顯示該文件的名字
} else
System.out.println("您輸入的路徑不存在,請重輸或者去醫院");
}
public static void main(String[] args) {
// 運行窗體
new MyDemo();
}
}
六、對話框
// 對話框基本設置
Dialog dialog = new Dialog(f, "錯誤提示", true);
dialog.setBounds(400, 200, 280, 150);
dialog.setLayout(new FlowLayout());
// 添加按鈕和文本
Button bok = new Button("確定");
Label lab = new Label("標題");
dialog.add(bok);
dialog.add(lab);
// 對話框關閉事件
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dialog.setVisible(false);// 退出對話框
}
});
dialog.setVisible(true);// 顯示對話框
1、Menu:菜單,繼承MenuItem;可添加Menu和MenuItem
2、MenuBar:菜單欄,可添加菜單和菜單條目。
3、MenuItem:菜單條目,也稱菜單項。
4、菜單的事件處理和組件一樣,可以對類型爲MenuItem和Menu的對象這個事件源添加活動監聽ActionListener,並進行相關的事件處理。
5、通過setMenuBar()方法,將菜單添加到Frame中。
import java.awt.*;
import java.awt.event.*;
class MyMenuDemo {
// 定義組件引用
private Frame f;
private MenuBar mb;
private Menu m, subMenu;
private MenuItem closeItem, subItem;
// 構造函數
MyMenuDemo() {
init();
}
// 窗體設置與功能實現
public void init() {
// 窗體設置
f = new Frame("my window");
f.setBounds(300, 100, 500, 600);
f.setLayout(new FlowLayout());
mb = new MenuBar();// 創建菜單條
m = new Menu("文件");// 創建菜單
subMenu = new Menu("子菜單");// 菜單下面的子菜單
subItem = new MenuItem("子條目");// 子菜單包含的菜單條目
closeItem = new MenuItem("退出");// 菜單包含的條目
// 菜單添加菜單組件
subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
// 窗體添加菜單組件
f.setMenuBar(mb);
// 窗體上事件
myEvent();
f.setVisible(true);
}
private void myEvent() {
// 關閉菜單具備關閉事件
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 窗體關閉功能
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new MyMenuDemo();
}
}
如何將程序的class文件打包
步驟如下:
1、新建一個文件,如1.txt或者其他任意名稱任意擴展名的文件都可,然後在其中編輯固定的格式:“Main-Class: mymenu.MenuDemo”。需要需要在冒號後有一個空格,在文件末尾要回車。
2、編譯:jar -cvfm my.jar 1.txt mymenu即可。
3、此時雙擊即可執行。
說明:
1、在固定格式中:
a、如果無空格:在編譯的時候,就會報IO異常,提示無效的頭字段,即invalidheader field。這說明1.txt在被IO流讀取。
b、如果無回車:在列表清單.MF中不會加入相應的加載主類的信息,也就是說配置清單的屬性主類名稱不會加載進清單中,也就不會執行。
2、jar文件必須在系統中註冊,才能運行。註冊方法如下:
A.對於XP系統:
a.打開任意對話框,在菜單欄點擊工具按鈕,選擇文件夾選項
b.選擇新建--->擴展名,將擴展名設置爲jar,確定
c.選擇高級,可更改圖標,然後點擊新建,命名爲open,
d.在用於可執行應用程序中,點瀏覽,將jdk下的bin的整個文件路徑添加進來,並在路徑後添加-jar即可。
B.對於win7系統:
a.改變打開方式:右擊.jar文件,點擊打開方式,選擇默認程序爲jdk下bin中的javaw.exe應用程序。
b.修改關聯程序的註冊表:打開註冊表(win+r),找到註冊表路徑\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右擊點修改,在原路徑的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe" -jar "%1",注意-jar兩邊要有空格,保存。
c.雙擊即可執行jar程序,如果仍不能執行,則需下載最新版的jdk。