圖形化界面


圖形化界面

   1. GUI:Graphical User Interface,圖形化用戶接口

  CLI:Command Line User Interface,命令行用戶接口
 
  區別:CLI需要記住一些命令,如果忘記了命令則很痛苦,而GUI則操作比較直觀、方便;
 
   2.java.Awt和javax.Swing的區別:
  java.Awt:抽象窗口工具包,需要本地系統方法實現,不易移植;
  javax.Swing:在Awt基礎之上,完全由java實現,增強移植性。
 
  3.繼承體系:Component組件
  |--Container:容器,可以添加其它基本組件;
  |--Window
  |--Frame:窗體
  |--Dialog:對話框
  |--FileDialog:文本框對話框
  |--Panel:面板
  |--基本組件
  |--Button:按鈕
  |--Lable:標籤
  |--CheckText:複選框
  |--TextComponent:文本組件
  |--TextField:文本框,單行文本
  |--TextArea:文本域,多行文本
 
  4.佈局管理器:
  佈局:容器中組件的排放方式。
  常見的佈局管理器:
  FlowLayout:流式佈局,從左到右,默認居中,Panel的默認佈局;
  BorderLayout:邊界式佈局,東南西北中,Frame的默認佈局;
  GirdLayout:網格式佈局,存放在網格中,如計算器;
  GirdBagLayout:網格包式佈局,不規則的矩陣。
  還有一種座標式佈局,隨意放。
 
  若有多種佈局,則添加Panel組件,將其他組件添加到Panel中,再將Panel按流式佈局。
 
  5.創建組件演示,以Frame爲例。

 
		Frame f=new Frame();//創建窗體對象;
  			f.setTitle("我的窗體");//設置窗體名稱
  			f.setSize(100,200);//設置窗體的長爲100,寬爲200;
  			f.setLocation(400,300);//設置窗體的頂點距左邊界400,距上邊界300;
  		
  			f.setBounds(100,20,400,300);//這句話將第二句和第三句合併,一個意思;
  			f.setVisiable(true);//設置窗體可見

  注意:開啓了圖形化界面後,多了線程。
 
  6.事件監聽機制:
  事件源:發生事件的組件對象,即awt包或者swing包中的那些圖形界面組件;
  事件:每一個事件源都有自己的對應事件和共性事件;
  事件監聽:對可能發生的事情的多個情況(動作)的封裝對象到了監聽器中,一般是個接口;
  事情處理:重寫事件監聽裏面的功能。
 
  7.GUI窗體事件
  WindowListener:監聽器
  註冊監聽器:1.匿名對象:用一個子類去實現接口,然後傳遞一個子類匿名對象即可;
  2.匿名內部類:定義一個匿名內部類重寫接口中的方法;
  f.addWindowListener(new WindowLisener());
 
  這種採用的是直接添加事件監聽器接口,但太麻煩,因爲可能我們只需要實現其中一兩個事件,而它要求我們全部實現,
  所以,這種方式不可取;後來,出現了事件監聽器的適配器,這個去實現事件監聽器接口,提供了空實現,在完成事件是,在那
  個裏面完成某個功能,就重寫某個方法即可,不需要全部實現。
 
  注意:不是所有的事件都有適配器的,如果方法較少是,不需要適配器。
 
  8.代碼改進:封裝Frame,在main中調用方法;需求如圖:將文本框中的內容通過點擊轉到按鈕輸出文本域中

 
		import java.awt.Button;
		import java.awt.Frame;
		import java.awt.TextArea;
		import java.awt.TextField;
		import java.awt.event.ActionEvent;
		import java.awt.event.ActionListener;
		import java.awt.event.WindowAdapter;
		import java.awt.event.WindowEvent;
	
		public class Test1 {
			public static void main(String[] args) {
				FrameTest f=new FrameTest();
			}
		}
		class FrameTest{
	
			private Frame f;
			private TextField tf;
			private Button bu;
			private TextArea ta;
			public FrameTest() {
				init();
			}
		
			private void init() {
				f=new Frame();//創建窗體
				f.setBounds(400, 300, 400, 300);//設置窗體屬性
				
				tf=new TextField(20);//創建一個文本框
				ta=new TextArea(10,40);//創建一個文本域
				bu=new Button("轉到");//創建按鈕
				//添加組件到窗體
				f.add(tf);
				f.add(ta);
				f.add(bu);
				//添加事件
				myEvent();
				f.setVisible(true);
			}
		
			private void myEvent() {
				f.addWindowListener(new WindowAdapter(){
					@Override
					public void windowClosing(WindowEvent e) {
						System.exit(0);
					}
				});
				bu.addActionListener(new ActionListener(){
					@Override
					public void actionPerformed(ActionEvent e) {
						//獲取文本框的值
						String s=tf.getText();
						//清空文本框
						tf.setText("");
						//將獲得值寫入到文本域中,追加並換行
						ta.append(s+System.getProperty("line.separator"));
					}
					
				});
			}
		}					


  9.菜單繼承體系:
  MenuComponent:菜單組件
  |--MenuBar:菜單欄
  |--MenuItem:菜單項
  |--Menu:菜單
 
  FileDialog:文件對話框
  getDictionary():獲取目錄;
  getFile():獲取對話框中選定的文件;
  setMode(status):設置文件對話框LOAD和SAVE模式。

 
  10.我的菜單欄案例
  MenuBar
文件(Menu)
|--更改標題(Menu)
|--好好學習(MenuItem)
|--天天向上(MenuItem)
|--恢復標題(MenuItem)
|--退出系統(MenuItem)
|--打開記事本 Runtime(MenuItem)


			import java.awt.Frame;
				import java.awt.Menu;
				import java.awt.MenuBar;
				import java.awt.MenuItem;
				import java.awt.event.ActionEvent;
				import java.awt.event.ActionListener;
				import java.awt.event.WindowAdapter;
				import java.awt.event.WindowEvent;
				import java.io.IOException;
				
				public class Test1 {
					public static void main(String[] args) {
						MenuTest mt=new MenuTest();
					}
				
				}
				class MenuTest{
					private Frame f;
					private MenuBar mb;
					private Menu m1,m2;
					private MenuItem mi1,mi2,mi3,mi4,mi5;
					protected String OldTitle;
				
					public MenuTest() {
						init();
						OldTitle=f.getTitle();
					}
				
					private void init() {
						f=new Frame();
						f.setTitle("我的菜單案例");
						f.setBounds(400,300,400,400);
						
						//創建菜單組件
						mb=new MenuBar();
						m1=new Menu("文件");
						m2=new Menu("更改標題");
						mi1=new MenuItem("好好學習");
						mi2=new MenuItem("天天向上");
						mi3=new MenuItem("退出系統");
						mi4=new MenuItem("打開記事本");
						mi5=new MenuItem("恢復標題");
						
						//誰添加誰
						m2.add(mi1);
						m2.add(mi2);
						m2.add(mi5);
						
						m1.add(m2);
						m1.add(mi3);
						m1.add(mi4);
						mb.add(m1);
						
						f.setMenuBar(mb);
						myEvent();
						f.setVisible(true);
					}
				
					private void myEvent() {
						f.addWindowListener(new WindowAdapter(){
							@Override
							public void windowClosing(WindowEvent e) {
								exit();
							}
						});
						mi1.addActionListener(new ActionListener(){
							@Override
							public void actionPerformed(ActionEvent e) {
								String s=mi1.getLabel();
								changeTitle(s);
							}
						});
						mi2.addActionListener(new ActionListener(){
							@Override
							public void actionPerformed(ActionEvent e) {
								String s=mi2.getLabel();
								changeTitle(s);
							}
						});
						mi3.addActionListener(new ActionListener(){
				
							@Override
							public void actionPerformed(ActionEvent e) {
								exit();
							}
							
						});
						mi4.addActionListener(new ActionListener(){
				
							@Override
							public void actionPerformed(ActionEvent e) {
								Runtime r=Runtime.getRuntime();
								try {
									r.exec("notepad.exe");
								} catch (IOException e1) {
									
									e1.printStackTrace();
								}
							}
							
						});
						mi5.addActionListener(new ActionListener(){
				
							@Override
							public void actionPerformed(ActionEvent e) {
								changeTitle(OldTitle);
							}
							
						});
					}
					//封裝修改標題的方法
					protected void changeTitle(String s) {
						f.setTitle(s);
					}
					//封裝退出方法
					private void exit() {
						System.exit(0);
					}
				}


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