1. 程式人生 > >Java基礎總結之GUI圖形介面程式設計

Java基礎總結之GUI圖形介面程式設計

GUI和CLI:

GUI:(Graphical User Interface)圖形使用者介面:用圖形的方式顯示計算機的操作介面。

CLI:(Command Line User Interface)命令列使用者介面:常見的Dos命令列操作。

awt和swing:

awt:(Abstract Windows ToolKit)抽象視窗工具包,需要呼叫本地系統方法實現功能,屬重量級控制元件。

swing:在awt的基礎上建立的一套圖形介面系統,屬於Javax擴充套件包下。其中提供了更多的元件。而且完全由Java實現增強了移植性,屬輕量級控制元件。

基本的GUI使用:(通過下面例項講解):

public class Demo {

	public static void main(String[] args) {
		// 建立視窗物件
		Frame f = new Frame("這是一個視窗");
		// 設定視窗的位置大小
		f.setBounds(400, 200, 400, 300);
		// 設定窗口布局為流體佈局
		f.setLayout(new FlowLayout());
		// 建立Button按鈕
		Button b = new Button();
		Button b2 = new Button("Touch me");
		b.setLabel("Click me");
		// 將按鈕新增到視窗中
		f.add(b);
		f.add(b2);
		// 建立選單欄
		MenuBar mb = new MenuBar();
		// 建立選單
		Menu m = new Menu("File");
		// 建立選單項
		MenuItem mi = new MenuItem("quit");
		// 選單項到選單
		m.add(mi);
		// 新增選單到選單欄
		mb.add(m);
		// 新增選單欄到視窗中
		f.setMenuBar(mb);
		// 給視窗關閉事件新增監聽
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		// 給按鈕b新增監聽事件
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("按鈕點選了!");
			}
		});
		// 給按鈕b2新增滑鼠事件
		b2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				f.setBackground(Color.red);
			}

			@Override
			public void mouseExited(MouseEvent e) {
				f.setBackground(Color.WHITE);
			}
		});
		// 給選單項設定監聽
		mi.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		// 設定視窗可見
		f.setVisible(true);

	}
}

上述程式碼中,實現了在一個視窗中佈局了兩個button按鈕,一個演示button按鈕的點選事件,一個演示了滑鼠箭頭的進入和淡出效果。另外該程式碼演示了一級選單的實現(實際上會了一級二級選單也就會了,一級選單的選單項可以是選單,也可以是選單項),給選單項設定了監聽事件,點選選單項既可以退出介面。這是GUI的簡單使用。這裡面有一點是需要特別注意的:就是介面卡模式的體現,在監聽事件中(包括滑鼠的進入移除),程式碼如下:

            // 給按鈕b2新增滑鼠事件
		b2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				f.setBackground(Color.red);
			}

			@Override
			public void mouseExited(MouseEvent e) {
				f.setBackground(Color.WHITE);
			}
		});
b2.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				f.setBackground(Color.white);
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				f.setBackground(Color.red);

			}

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub

			}
		});

實際上上訴兩段程式碼的效果是相同的,同樣可以在滑鼠進入和移出時產生效果,但是程式碼的複雜度,是可以看的見的,介面卡的使用,避免了我們對一個接口裡面所有方法的實現,我們只需使用一個繼承過某一介面的實現類的類就能完成。然後在該類中重寫父類方法就可以。就像是第一段程式碼中的MouseAdapter是第二段程式碼中的MouseListener的子類,MouseListener實現了介面中的所有方法,MouseAdapter繼承了MouseListener,所以,當MouseAdapter需要使用到哪個方法,只需重寫父類方法就行。具體的介面卡模式的講解檢視Java基礎總結之設計模式(四)。

關於GUI圖形介面開發,實際上後期會使用NetBeans等開發工具開發,其相對於eclipse有更友好的圖形介面展示。


注:以上文章僅是個人學習過程總結,若有不當之處,望不吝賜教。