黑馬程序員_JAVA_GUI

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------


一、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


三、佈局管理器

常見的佈局管理器:

        1FlowLayout:流式佈局管理器。從左向右排列,是Panel默認的佈局管理器

        2BorderLayout:邊界式佈局管理器,東南西北中的排列方式,是Frame的默認佈局管理器。如果窗體中只有一個組件,將會覆蓋整個窗體。

        3GridLayout:網格式佈局管理器,規則的矩陣

        4CardLayout:卡片式佈局管理器,即選項卡

        5GridBayLayout:網格包佈局管理器,非規則矩陣


四、創建窗體界面

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、事件源(組件):awtswing包中的那些圖形界面組件

        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);// 顯示對話框


七、菜單組件

        1Menu:菜單,繼承MenuItem;可添加MenuMenuItem

        2MenuBar:菜單欄,可添加菜單和菜單條目。

        3MenuItem:菜單條目,也稱菜單項。

        4菜單的事件處理和組件一樣,可以對類型爲MenuItemMenu的對象這個事件源添加活動監聽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();
	}
}


八、jar雙擊執行

如何將程序的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中不會加入相應的加載主類的信息,也就是說配置清單的屬性主類名稱不會加載進清單中,也就不會執行。

        2jar文件必須在系統中註冊,才能運行。註冊方法如下:

        A.對於XP系統:

               a.打開任意對話框,在菜單欄點擊工具按鈕,選擇文件夾選項

               b.選擇新建--->擴展名,將擴展名設置爲jar,確定

               c.選擇高級,可更改圖標,然後點擊新建,命名爲open

               d.在用於可執行應用程序中,點瀏覽,將jdk下的bin的整個文件路徑添加進來,並在路徑後添加-jar即可。

        B.對於win7系統:

               a.改變打開方式:右擊.jar文件,點擊打開方式,選擇默認程序爲jdkbin中的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

發佈了46 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章