1. 程式人生 > >GUI使用者圖形介面

GUI使用者圖形介面

一、兩個常用包

①java.awt: 和系統關聯較強

②java.swing:純Java編寫

二、GUI的繼承體系

        元件:元件就是物件

                容器元件:是可以儲存基本元件和容器元件的元件

                基本元件:是可以使用的元件,但是必須依賴容器

三、事件監聽機制        

    A:事件源    B:事件    C:事件處理    D:事件監聽

        A:事件源 事件發生的地方

B:事件 就是要發生的事情

C:事件處理 就是針對發生的事情做出的處理方案

D:事件監聽 就是把事件源和事件關聯起來


四、介面卡模式

A:介面    B:抽象適配類    C:實現類

介面卡模式_菜鳥教程

五、案例

建立窗體案例

public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件
		// Frame f = new Frame();
		// Frame(String title)
		Frame f = new Frame("林青霞");

		// 設定窗體標題
		f.setTitle("HelloWorld");
		
              // 設定窗體大小
	      // f.setSize(400, 300); // 單位:畫素
	      // 設定窗體位置
	      // f.setLocation(400, 200);
              // 一個方法搞定
              f.setBounds(400,200,400,300);
// 呼叫一個方法,設定讓窗體可見f.setVisible(true);}}②窗體關閉
public class FrameDemo {
	public static void main(String[] args) {
		Frame f = new Frame("窗體關閉案例");
		
		f.setBounds(400, 200, 400, 400);
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				System.exit(0);
			}
		});
		
		f.setVisible(true);
		
	}
}

③按鈕事件

/*
 * 需求:把按鈕新增到窗體,並對按鈕新增一個點選事件。
 * A:建立窗體物件
 * B:建立按鈕物件
 * C:把按鈕新增到窗體
 * D:窗體顯示
 */
public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件
		Frame f = new Frame("新增按鈕");
		// 設定屬性
		f.setBounds(400, 200, 400, 300);
		// 設定佈局為流式佈局
		f.setLayout(new FlowLayout());

		// 建立按鈕物件
		Button bu = new Button("點我啊");
		// bu.setSize(20, 10);

		// 把按鈕新增到窗體
		f.add(bu);

		// 設定窗體可以關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("你再點試試");
			}
		});

		// 窗體顯示
		f.setVisible(true);
	}
}

④把文字框裡面的資料轉移到文字域

public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件
		Frame f = new Frame("資料轉移");
		// 設定窗體屬性和佈局
		f.setBounds(400, 200, 400, 300);
		f.setLayout(new FlowLayout());

		// 建立文字框
		final TextField tf = new TextField(20);
		// 建立按鈕
		Button bu = new Button("資料轉移");
		// 建立文字域
		final TextArea ta = new TextArea(10, 40);

		// 把元件新增到窗體
		f.add(tf);
		f.add(bu);
		f.add(ta);

		// 設定窗體關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// 對按鈕新增事件
		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 獲取文字框的值
				String tf_str = tf.getText().trim();
				// 清空資料
				tf.setText("");

				// 設定給文字域
				// ta.setText(tf_str);

// 保留上次的文字// ta.setText("");// 追加和換行ta.append(tf_str + "\r\n");//獲取游標tf.requestFocus();}});// 設定窗體顯示f.setVisible(true);}}

⑤滑鼠進入事件更改背景色

public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件
		Frame f = new Frame("滑鼠更改背景色");
		// 設定窗體屬性和佈局
		f.setBounds(400, 200, 400, 300);
		f.setLayout(new FlowLayout());

		Button redButton = new Button("藍色");

		f.add(redButton);

		// 設定窗體關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		// 對按鈕新增動作事件
		// redButton.addActionListener(new ActionListener() {
		// @Override
		// public void actionPerformed(ActionEvent e) {
		// // TODO Auto-generated method stub
		// f.setBackground(Color.BLUE);
		// }
		// });
		// 對按鈕新增滑鼠點選事件
		// redButton.addMouseListener(new MouseAdapter() {
		// @Override
		// public void mouseClicked(MouseEvent e) {
		// // TODO Auto-generated method stub
		// f.setBackground(Color.BLUE);
		// }
		// });

		// 對按鈕新增滑鼠的進入事件
		redButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				f.setBackground(Color.BLUE);
			}
		});

		redButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				f.setBackground(Color.RED);
			}
		});

		// 設定窗體顯示
		f.setVisible(true);
	}
}
⑥設定文字框裡面不能輸入非數字字元
public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件並設定屬性
		Frame f = new Frame("不能輸入非數字字元");
		f.setBounds(400, 200, 400, 300);
		f.setLayout(new FlowLayout());

		// 建立Label標籤物件
		Label label = new Label("請輸入你的QQ號碼,不能是非數字,不信你試試");
		TextField tf = new TextField(40);

		// 新增到窗體上
		f.add(label);
		f.add(tf);

		// 設定窗體關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// 給文字框新增事件
		tf.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				// 如果你取得的字元不是數字字元就取消事件
				// 思路:先獲取字元,判斷字元,取消事件
				// char getKeyChar()  
				char ch = e.getKeyChar();
//				System.out.println(ch);
				if(!(ch>='0' && ch<='9')){
					e.consume();
				}
			}
		});

		// 設定窗體可見
		f.setVisible(true);
	}
}
⑦一級選單
public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件並設定屬性
		Frame f = new Frame("一級選單");
		f.setBounds(400, 200, 400, 300);
		f.setLayout(new FlowLayout());

		// 建立選單欄
		MenuBar mb = new MenuBar();
		// 建立選單
		Menu m = new Menu("檔案");
		// 建立選單項
		MenuItem mi = new MenuItem("退出系統");

		// 誰新增誰呢
		m.add(mi);
		mb.add(m);

		// 設定選單欄
		f.setMenuBar(mb);

		// 設定窗體關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		mi.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		// 設定窗體可見
		f.setVisible(true);
	}
}
⑧多級選單
public class FrameDemo {
	public static void main(String[] args) {
		// 建立窗體物件並設定屬性
		final Frame f = new Frame("多級選單");
		f.setBounds(400, 200, 400, 300);
		f.setLayout(new FlowLayout());
		
		final String name = f.getTitle();

		// 建立選單欄
		MenuBar mb = new MenuBar();
		// 建立選單
		Menu m1 = new Menu("檔案");
		Menu m2 = new Menu("更改名稱");
		// 建立選單項
		final MenuItem mi1 = new MenuItem("好好學習");
		final MenuItem mi2 = new MenuItem("天天向上");
		MenuItem mi3 = new MenuItem("恢復標題");
		MenuItem mi4 = new MenuItem("開啟記事本");
		MenuItem mi5 = new MenuItem("退出系統");

		// 誰新增誰呢
		m2.add(mi1);
		m2.add(mi2);
		m2.add(mi3);
		
		m1.add(m2);
		m1.add(mi4);
		m1.add(mi5);
		
		mb.add(m1);

		// 設定選單欄
		f.setMenuBar(mb);

		// 設定窗體關閉
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		mi1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(mi1.getLabel());
			}
		});
		
		mi2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(mi2.getLabel());
			}
		});
		
		mi3.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(name);
			}
		});
		
		mi4.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Runtime r = Runtime.getRuntime();
				try {
					r.exec("notepad");
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});

		mi5.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		// 設定窗體可見
		f.setVisible(true);
	}
}