1 / 23

AWT 視窗與圖形使用者介面

AWT 視窗與圖形使用者介面. 認識視窗與圖形介面 AWT 元件. AWT 為 Abstract Windows Toolkid 的簡稱,是一組較古老的輸出入元件,現已漸漸被 Swing 元件所取代。 但是目前較新版本的遊覽器並未全部支援 Swing 元件,所以開發 Applet 時,暫時還是使用 AWT 元件。. 認識 AWT 視窗工具類別:.

Download Presentation

AWT 視窗與圖形使用者介面

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AWT視窗與圖形使用者介面

  2. 認識視窗與圖形介面AWT元件 • AWT為Abstract Windows Toolkid的簡稱,是一組較古老的輸出入元件,現已漸漸被Swing元件所取代。 • 但是目前較新版本的遊覽器並未全部支援Swing元件,所以開發Applet時,暫時還是使用AWT元件。

  3. 認識AWT視窗工具類別: • AWT(Abstract Window Tookit)是Java語言的視窗工具類別,這個工具箱包含許多與平台無關,任何平台均可以使用的視窗、繪圖和使用者介面等相關元件(Component),存放在java.awt程式套件中。 • 「元件」依功能不同,分為兩大類: • 可以盛裝元件的「收納器」(Container) • 無法盛裝元件的「一般元件

  4. AWT 的繼承關係

  5. 在 Java 程式的最開頭,要使用 import 命令將這些程式匯入,命令如下: • import java.awt.component; • import java.awt.container; • import java.awt.window; • import java.awt.frame; 也可以使用 “*” 符號,匯入所有程式,命令如下: • import java.awt.*;

  6. AWT簡單的範例 import java.awt.*; // 載入java.awt類別庫裡的所有類別 public class Windows01 { Frame frm=new Frame(); TextField tf1=new TextField(20); Button bt1=new Button("Click"); Label lab1=new Label("The answer will be showen here!!"); public Windows01(String Title) { frm.setSize(400,150); //設定視窗的長為200、寬為150個像素 frm.setTitle(Title); FlowLayout flow = new FlowLayout(FlowLayout.LEFT,5,10); frm.setLayout(flow); lab1.setBackground(Color.yellow); // 設定黃色的背景 frm.add(tf1); frm.add(bt1); frm.add(lab1); // 將標籤物件lab加入視窗中 frm.setVisible(true); // 將視窗顯示出來 } public static void main(String args[]) { Windows01 a=new Windows01 ("AWT GUI!!");; } }

  7. Some methods about Frame • Frame frm=new Frame("my first AWT program" ); • frm.add(lab); • frm.setTitle( “my 2nd AWT program” ); // 在視窗中加入標題 • frm.setResizable(false); // 將視窗設定為固定大小 • frm.setLayout(null); // 不使用版面配置 • frm.setSize(200,150); // 設定視窗的寬為200、高為150個像素 • frm.setBackground(Color.yellow); // 設定黃色的背景 • frm.setLocation(250,250); // 設定視窗的位置 • frm.setVisible(true); // 將視窗顯示出來 • frm.pack(); //調整視窗大小以容納所有元件 • System.out.println("state="+frm.getState()); • System.out.println("title="+frm.getTitle()); • System.out.println("visible="+frm.isVisible());

  8. Some methods about Label • Label lab=new Label(); • lab.setText( "Hello Java“ ); // 在標籤內加上文字 • lab.setBackground(Color.yellow); // 設定標籤底色為黃色 • lab.setAlignment(Label.CENTER); // 將標籤內的文字置中 • lab.setForeground(Color.blue); // 設定標籤文字為藍色 • lab.setLocation(60,50); // 設定標籤位置 • lab.setSize(120,20); // 設定標籤大小 • Font fnt=new Font("Serief",Font.ITALIC+Font.BOLD,18); • lab.setFont(fnt); // 設定字型的樣式 • frm.add(lab);

  9. TextFiled Demo import java.awt.*; public class TextFieldD { Frame frm =new Frame("TextField Class"); TextField txf1 =new TextField("TextField Demo"); TextField txf2 =new TextField("Editable"); TextField txf3 =new TextField("password");; public TextFieldD() { frm.setSize(200,150); frm.setLayout(null); frm.setBackground(Color.yellow); txf1.setBounds(20, 40,120,20); txf2.setBounds(20, 70,120,20); txf3.setBounds(20,100,120,20); txf1.setEditable(false); // 設定txf1為不可編輯 txf3.setEchoChar('*'); // 設定txf3的回應字元為'*' frm.add(txf1); frm.add(txf2); frm.add(txf3); System.out.println(txf1.getText()); System.out.println(txf2.getText()); System.out.println(txf3.getText()); frm.setVisible(true); } public static void main(String args[]) { new TextFieldD(); } }

  10. Checkbox Demo import java.awt.*; public class CheckboxD { Frame frm=new Frame("Checkbox class"); Checkbox ckb1, ckb2, ckb3, ckb4, ckb5; CheckboxGroup grp=new CheckboxGroup(); // 建立群組物件grp; public CheckboxD() { frm.setSize(200,150); frm.setLayout(null); frm.setBackground(Color.yellow); ckb1=new Checkbox("Epson 5900L",true); ckb2=new Checkbox("HP LaserJet 4p",true); ckb3=new Checkbox("Other printer"); ckb4=new Checkbox( "black & white printer" ); ckb5=new Checkbox( "color printer" ); ckb1.setBounds(20,40,140,20); ckb2.setBounds(20,60,140,20); ckb3.setBounds(20,80,140,20); ckb4.setBounds(20,100,140,20); ckb5.setBounds(20,120,140,20); ckb4.setCheckboxGroup(grp); // 將ckb4加入grp群組中 ckb5.setCheckboxGroup(grp); // 將ckb5加入grp群組中 ckb4.setState(true);//將ckb4設為選取狀態 frm.add(ckb1); frm.add(ckb2); frm.add(ckb3); frm.add(ckb4); frm.add(ckb5); frm.setVisible(true); } public static void main(String args[]) { CheckboxD a=new CheckboxD(); } }

  11. Frame1 繼承Frame 再加入數量不定的Checkbox import java.awt.*; public class Frame1 extends Frame { public Frame1() { super(); } Checkbox ckb1[]; public void setCKB1(String[] str) { int m=str.length; ckb1 =new Checkbox[m]; for(int i=0;i<m;i++) { ckb1[i]= new Checkbox(str[i],false); add(ckb1[i]); } } public static void main(String args[]) { String str[]={"Epson 5900L","HP LaserJet 4p","Other printer"}; Frame1 frm=new Frame1(); FlowLayout flow = new FlowLayout(FlowLayout.LEFT,5,10); frm.setTitle("CheckBox"); frm.setCKB1(str); frm.setSize(200,150); frm.setLayout(flow); frm.setBackground(Color.yellow); frm.setVisible(true); } // 請於測試完成Frame1 後, 移除 main()以方便 以後Frame1被其他類別繼承使用 }

  12. Frame3 import java.awt.*; class Frame3 extends Frame { TextArea txa3 = new TextArea("",15,50,TextArea.SCROLLBARS_VERTICAL_ONLY); Button btn3; Label lab3; TextField tf3; public Frame3(String title, String lb, String bt) { super(title); lab3= new Label(lb); btn3=new Button(bt); tf3=new TextField(20); add(lab3); add(tf3); add(btn3); add(txa3); FlowLayout flow = new FlowLayout(FlowLayout.LEFT,5,10); setBackground(Color.yellow); setLayout(flow); setSize(500,400); //調整視窗大小 setVisible(true); } public static void main(String args[]) { Frame3 a=new Frame3("載入文字檔案","檔案路徑與名稱","讀入"); } //測試無誤後 編譯成 Frame3.class以供其它繼承或使用 }

  13. 執行結果

  14. Frame4.java import java.awt.*; class Frame4 extends Frame3 { Button btn4; Label lab4; TextField tf4; public Frame4( String title, String lb, String bt, String lb4,String bt4) { super( title, lb, bt); lab4=new Label(lb4); btn4=new Button(bt4); tf4=new TextField(" "); add(lab4); add(tf4); add(btn4); } public static void main(String args[]) { Frame4 a=new Frame4("Copy文字檔案","檔案路徑與名稱","讀入","output檔案路徑與名稱","寫出"); a.setVisible(true); } //測試無誤後 主程式可以移除後再編譯成 Frame4.class以供其它繼承或使用 }

  15. 執行結果

  16. 利用上述元件建立一個圖形視窗程式: import java.awt.*; public class ComponentC { Frame frame = new Frame("First Window Program!"); Choice chc=new Choice(); List ls=new List(3, false); public ComponentC() { frame.setLayout(new GridLayout(7, 1)); frame.add(new Label("喜好選擇(可複選):")); //+Label元件1 frame.add(new Checkbox("音樂")); // +Checkbox元件2 frame.add(new Checkbox("體育")); // +Checkbox元件3 frame.add(new Checkbox("美術")); // +Checkbox元件4 chc.add("Red"); chc.add("Green"); chc.add("Blue"); frame.add(chc); // +Choice元件5 ls.add("一年級"); ls.add("二年級"); ls.add("三年級"); frame.add(ls);//+list元件6 frame.add(new Button("測試按鈕")); // +Button元件7 frame.pack(); //調整視窗大小以容納所有元件 frame.setVisible(true); //顯示視窗 System.out.println("結束視窗程式,請按下CTRL+C"); } public static void main(String[] args) { new ComponentC(); } }

  17. 視窗畫面顯示如下: 若將GridLayout(7, 1) 改為GridLayout(1,7),則視窗畫面如下:

  18. Java語言提供了下列六種版面配置類別: • FlowLayout ‘流動式版面配置 • BorderLayout ‘邊界式版面配置 • GridLayout ‘方格式版面配置 • CardLayout ‘多層式版面配置 • GridBagLayout ‘進階方格式版面配置 • BoxLayout ‘盒子式版面配置

  19. BorderC import java.awt.*; public class BorderC { Frame frm =new Frame("Border Layout");; BorderLayout border =new BorderLayout();; public BorderC() { frm.setLayout(border);//將版面配置設定為BorderLayout frm.setSize(200,150); frm.add(new Button("東"),border.EAST); frm.add(new Button("西"),border.WEST); frm.add(new Button("南"),border.SOUTH); frm.add(new Button("北"),border.NORTH); frm.add(new Button("中"),border.CENTER); frm.setVisible(true); } public static void main(String args[]) { new BorderC(); } }

  20. CardC import java.awt.*; public class CardC { Frame frm =new Frame("Card Layout");; CardLayout card=new CardLayout(5,5);//(與垂直邊距離,與水平邊距離) public CardC() { frm.setLayout(card); frm.setSize(200,150); frm.add(new Button("Button 1"),"c1"); frm.add(new Button("Button 2"),"c2"); frm.add(new Button("Button 3"),"c3"); card.show(frm,"c2"); frm.setVisible(true); } public static void main(String args[]) { new CardC(); } }

  21. GridLayout Demo import java.awt.*; public class TestGrid { Frame frm=new Frame("Grid Layout"); GridLayout grid=new GridLayout(3,5);//3列5行的配置 public TestGrid() { frm.setLayout(grid); frm.setSize(200,150); for(int i=1;i<=15;i++) frm.add(new Button(Integer.toString(i))); // 加入按鈕 frm.setVisible(true); } public static void main(String args[]) { new TestGrid(); } }

  22. 使用Panel面板 • AWT也提供了面板(panel),可以用來盛裝元件 • 每一個面板都可以擁有自已的屬性,包括顏色、大小,甚至於是版面配置 • 可以把物件先放在面板上,再把面板鑲到視窗裡去

  23. PanelG import java.awt.*; public class PanelG { Frame frm=new Frame("Panel class"); // 建立視窗frm Panel pnl =new Panel(new GridLayout(3,3)); Label lab =new Label("0. ",Label.RIGHT); // 建立標籤lab public PanelG() { frm.setLayout(null); // 取消視窗的版面設定 frm.setSize(200,150); frm.setResizable(false); // 將視窗設定為固定大小 lab.setBounds(20,30,120,20); lab.setBackground(new Color(240,220,190)); // 設定標籤的顏色 pnl.setBounds(20,60,120,80); // 設定pnl置於視窗內的位置 for(int i=1;i<=9;i++) pnl.add(new Button(Integer.toString(i))); // 加入按鈕 frm.add(lab); // 將lab放進視窗中 frm.add(pnl); // 將面板放進視窗中 frm.setVisible(true); } public static void main(String args[]) { new PanelG();} }

More Related