230 likes | 374 Views
AWT 視窗與圖形使用者介面. 認識視窗與圖形介面 AWT 元件. AWT 為 Abstract Windows Toolkid 的簡稱,是一組較古老的輸出入元件,現已漸漸被 Swing 元件所取代。 但是目前較新版本的遊覽器並未全部支援 Swing 元件,所以開發 Applet 時,暫時還是使用 AWT 元件。. 認識 AWT 視窗工具類別:.
E N D
認識視窗與圖形介面AWT元件 • AWT為Abstract Windows Toolkid的簡稱,是一組較古老的輸出入元件,現已漸漸被Swing元件所取代。 • 但是目前較新版本的遊覽器並未全部支援Swing元件,所以開發Applet時,暫時還是使用AWT元件。
認識AWT視窗工具類別: • AWT(Abstract Window Tookit)是Java語言的視窗工具類別,這個工具箱包含許多與平台無關,任何平台均可以使用的視窗、繪圖和使用者介面等相關元件(Component),存放在java.awt程式套件中。 • 「元件」依功能不同,分為兩大類: • 可以盛裝元件的「收納器」(Container) • 無法盛裝元件的「一般元件
在 Java 程式的最開頭,要使用 import 命令將這些程式匯入,命令如下: • import java.awt.component; • import java.awt.container; • import java.awt.window; • import java.awt.frame; 也可以使用 “*” 符號,匯入所有程式,命令如下: • import java.awt.*;
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!!");; } }
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());
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);
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(); } }
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(); } }
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被其他類別繼承使用 }
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以供其它繼承或使用 }
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以供其它繼承或使用 }
利用上述元件建立一個圖形視窗程式: 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(); } }
視窗畫面顯示如下: 若將GridLayout(7, 1) 改為GridLayout(1,7),則視窗畫面如下:
Java語言提供了下列六種版面配置類別: • FlowLayout ‘流動式版面配置 • BorderLayout ‘邊界式版面配置 • GridLayout ‘方格式版面配置 • CardLayout ‘多層式版面配置 • GridBagLayout ‘進階方格式版面配置 • BoxLayout ‘盒子式版面配置
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(); } }
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(); } }
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(); } }
使用Panel面板 • AWT也提供了面板(panel),可以用來盛裝元件 • 每一個面板都可以擁有自已的屬性,包括顏色、大小,甚至於是版面配置 • 可以把物件先放在面板上,再把面板鑲到視窗裡去
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();} }