天天看點

黑馬程式員_基礎_GUI

-------android教育訓練、java教育訓練、期待與您交流!----------

1、GUI概述

GUI:Graphical User Interface(圖形使用者接口)。用圖形的方式,來顯示計算機操作的界面,這樣更友善更直覺。

CLI:Command line User Interface(指令行使用者接口)。就是常見的Dos指令操作,需要記憶一些常用的指令,操作不直覺。

Java為GUI提供的對象都存在java.Awt和javax.Swing兩個包中。

java.Awt: Abstract Window ToolKit(抽象視窗工具包),需要調用本地系統方法實作功能,屬于重量級控件。

javax.Swing: 在AWT的基礎上,建立的一套圖形界面系統,其中提供了更多的元件,而且完全有Java實作。增強了移植性,屬輕量級控件。

GUI元件繼承關系圖:

黑馬程式員_基礎_GUI

其中Container為容器,是一個特殊的元件,該元件可以通過add方法添加其他元件進來。

2、簡單Frame建立示範

下面為建立代碼及相關說明:

/*
	 * 建立圖形化界面:
	 * 1、建立frame窗體。
	 * 2、對窗體進行基本設定:比如大小、位置、布局等等。
	 * 3、定義元件。
	 * 4、将元件通過窗體的add方法添加到窗體中
	 * 5、讓窗體顯示,通過setVisible(true)方法
	 */
	//簡單Frame示範
	public static void frame(){
		
		Frame f = new Frame("my awt");	//new之後預設使用邊界布局
		f.setVisible(true);		//設定窗體可見
		f.setSize(500, 300);	//設定窗體大小,機關為px
		f.setLocation(300, 100);	//設定窗體位置,第一個參數表示距左邊300px,第二個參數表示距頂部100px
		f.setLayout(new FlowLayout());		//設定為流式布局
		
		Button b = new Button("我是一個按鈕");
		f.add(b);	//将button添加到frame中
	}
           

圖形界面效果:

黑馬程式員_基礎_GUI

3、窗體事件

class FrameDemo{
	
	private Frame f;
	private Button b;
	
	public FrameDemo(){
		init();
	}
	
	public void init(){
		
		f = new Frame("my frame");
		
		//對frame進行基本設定
		f.setBounds(300, 100, 600, 500);
		f.setLayout(new FlowLayout());
		
		b = new Button("my button");
		f.add(b);	//将元件添加到frame中
		
		myEvent();	//加載一下窗體上事件
		f.setVisible(true);	//顯示窗體
		
	}
	
	private void myEvent(){
		
		f.addWindowListener(new WindowAdapter(){	//監聽關閉按鈕
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		
		//讓按鈕具備退出程式的功能,按鈕就是事件源。
		//通過關閉窗體示例了解到,想要知道哪個元件具備什麼樣的特有監聽器。需要檢視該元件對象的功能。
		//通過查閱API,發現按鈕支援一個特有監聽addActionListener
		b.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
	}
}
           

4、滑鼠鍵盤事件

class MouseKeyBoardDemo{	//滑鼠鍵盤事件
	
	private Frame f;
	private Button b;
	private TextField tf;
	
	public MouseKeyBoardDemo(){
		init();
	}
	
	public void init(){
		
		f = new Frame("my frame");
		
		//對frame進行基本設定
		f.setBounds(300, 100, 600, 500);
		f.setLayout(new FlowLayout());
		
		b = new Button("my button");
		tf = new TextField(10);		//10列
		f.add(tf);		//将文本框添加到窗體中
		f.add(b);	//将元件添加到frame中
		
		myEvent();	//加載一下窗體上事件
		f.setVisible(true);	//顯示窗體
		
	}
	
	private void myEvent(){
		
		f.addWindowListener(new WindowAdapter(){	//監聽關閉按鈕
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		
		b.addActionListener(new ActionListener(){	//添加action監聽
			public void actionPerformed(ActionEvent e){
				P.rintln("action ok");
			}
		});
		
		b.addMouseListener(new MouseAdapter(){		//添加滑鼠監聽
			private int count = 1;
			private int clickCount = 1;
			
			public void mouseEntered(MouseEvent e){
				P.rintln("滑鼠第" + count++ + "次進入到按鈕");
			}
			
			public void mouseClicked(MouseEvent e){
				P.rintln("滑鼠第" + clickCount++ + "次點選按鈕");
				if(e.getClickCount() == 2){
					P.rintln("輕按兩下動作");
				}
			}
		});
		
		b.addKeyListener(new KeyAdapter(){	//給按鈕添加鍵盤監聽
			public void keyPressed(KeyEvent event){
				
				P.rintln(event.getKeyChar() + "..." + event.getKeyCode());
				P.rintln(KeyEvent.getKeyText(event.getKeyCode()));
				
				if(event.getKeyCode() == KeyEvent.VK_ESCAPE){	//按Esc鍵退出
					System.exit(0);
				}
				
				if(event.isControlDown() && event.getKeyCode() == KeyEvent.VK_ENTER){	//按Conrol+Enter鍵退出
					System.exit(0);
				}
			}
		});
		
		tf.addKeyListener(new KeyAdapter(){		//給文本框添加鍵盤監聽
			
			public void keyPressed(KeyEvent e){	
				
				//此方法不能監聽中文輸入
				int code = e.getKeyCode();
				if((code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9) || code == KeyEvent.VK_BACK_SPACE){}
				else{
					P.rintln(code + "是非法的");
					e.consume();
				}
			}
		});
	}
}
           

5、練習-列出指定目錄内容