版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、北京大學(xué)出版社,第06章,Java程序設(shè)計案例教程,第06章 Java語言的圖形用戶界面開發(fā),UI組件及其層次結(jié)構(gòu) AWT常用組件及其應(yīng)用 Swing常用組件及其應(yīng)用 使用框架、面板和GUI組件創(chuàng)建用戶界面 使用布局管理器管理在容器中布局組件 事件處理機(jī)制 小應(yīng)用程序的概念及應(yīng)用,6.1 應(yīng)用AWT組件開發(fā)圖形用戶界面程序,Abstract Windows Toolkit(AWT)是最原始的Java GUI工具包。AWT 的主要優(yōu)點是它在Java技術(shù)的每個版本上都成為了一種標(biāo)準(zhǔn)配置。這意味著不需要單獨安裝這個工具包,在任何一個Java運行環(huán)境中都可以使用它。 AWT是一個非常簡單的具有有限GU
2、I組件、布局管理器和事件的工具包。 AWT還提供了一個豐富的圖形環(huán)境,尤其是在Java 1.2及其以后版本中更是如此。通過Graphics2D對象和Java 2D、Java 3D服務(wù),可以創(chuàng)建功能強(qiáng)大的圖形應(yīng)用程序。,java.awt包中主要的類及層次關(guān)系如下: java.lang.Object所有Java類的超類 |- Font字體類 |- Color顏色類 |- Graphics圖形類 |- Component組件類 | |- Label標(biāo)簽類 | |- Button按鈕類 | |- TextComponent文本組件類 | | |- TextField文本域類(單行) | | |- Te
3、xtArea文本區(qū)類(多行) | |- List列表類 | |- Container容器類 | | |- Panel面板類 | | | |- Applet小程序類 | | |- Window窗口類 | | |- Frame框架類 | | |- Dialog對話框類 | |- Checkbox單選按鈕與復(fù)選按鈕類 |- CheckBoxGroup按鈕組合類 |- MenuComponent菜單組件類 | |- MenuBar菜單欄類 | |- MenuItem菜單項類 |- FlowLayout布局管理器 |- BorderLayout布局管理器 |- GridLayout布局管理器 |- Ca
4、rdLayout布局管理器 |- GridBagLayout布局管理器,6.1.1 使用java.awt設(shè)計圖形用戶界面,抽象窗口工具包AWT是Sun公司為Java程序設(shè)計者提供的建立圖形用戶界面GUI的工具集。AWT可用于Java的Applet和Application程序中。 它支持的圖形用戶界面編程功能包括:用戶界面組件、事件處理模型、圖形和圖像工具、布局管理器。因此,編寫圖形用戶界面程序一定要引入java.awt包。,import java.awt.*; import java.awt.event.*; import java.util.*; public class myClock e
5、xtends Frame implements ActionListener Label lblTimeDisplay=new Label(請單擊顯示時間按鈕); Button btnDisplayTime = new Button(顯示時間); myClock()/構(gòu)造方法 super(一個簡單的AWT應(yīng)用程序); btnDisplayTime.addActionListener(this);/為組件注冊監(jiān)聽器 setLayout(new BorderLayout();/設(shè)置布局管理器 this.add(lblTimeDisplay,BorderLayout.NORTH);/添加組件 thi
6、s.add(btnDisplayTime,BorderLayout.SOUTH); this.addWindowListener(new WindowAdapter()/注冊監(jiān)聽器 public void windowClosing(WindowEvent e)System.exit(0); ); ,例6-1一個簡單的圖形用戶界面程序,public void actionPerformed(ActionEvent e)/按鈕事件處理方法 Calendar calTime = Calendar.getInstance(); lblTimeDisplay.setText(“現(xiàn)在時間 + calTi
7、me.get(Calendar.HOUR_OF_DAY)+ 時 +calTime.get(Calendar.MINUTE)+分); public static void main(String args) Frame frame = new myClock ();/實例化類 frame.setSize(150,80);/設(shè)置窗口大小 frame.setLocationRelativeTo(null);/在屏幕中間顯示窗口 frame.setVisible(true);/使窗口可見 ,6.1.1 使用java.awt設(shè)計圖形用戶界面,知識點 Java是純面向?qū)ο蟮某绦蛟O(shè)計語言,因此,不管是控制臺
8、應(yīng)用程序,還是圖形界面的應(yīng)用程序,都要先定義一個類。一個應(yīng)用程序可以有多個類,但只能有一個public類,而且只能有一個main()方法,這個方法一定要位于這個公共類中。 開發(fā)圖形用戶界面程序的一般步驟如下。 (1) 創(chuàng)建組件(包括容器)對象,設(shè)置組件對象的屬性。 (2) 如果需要,為組件注冊監(jiān)聽器。 (3) 設(shè)置容器的布局管理器。 (4) 向容器中添加組件對象(使用容器的add()方法)。 (5) 編寫事件處理程序(實現(xiàn)監(jiān)聽器中的方法)。,6.1.2 容器和組件,Java的圖形用戶界面是由組件組成的,例如按鈕(Button)、文本域(TextField)和標(biāo)簽(Label)等。其中有一類特殊
9、的組件稱為容器(Container),例如框架(Frame,是一個有邊框的獨立窗口,與Windows窗口相似)、面板(Panel,是包含在窗口中的一個不帶邊框的區(qū)域)等。容器是用來盛放其他組件的,可以通過容器提供的add()方法將組件添加到容器中。對于小程序(Applet),由于其本身就是一個容器(因為它是Panel的子類),因此,可以將組件直接添加到小程序上。也可以先將組件加到其他容器中,然后再將容器加到小程序中。,6.1.2 容器和組件,用框架Frame創(chuàng)建的窗口是一個可獨立運行的主窗口,常用于開發(fā)桌面應(yīng)用程序,用它創(chuàng)建的窗口是一個包含標(biāo)題欄、系統(tǒng)菜單欄、最大最小化按鈕以及可選菜單欄的完整
10、窗口。創(chuàng)建一個Frame窗口后,通常需要調(diào)用setSize()方法來設(shè)置窗口的大小,并調(diào)用setVisible()方法來顯示窗口。Frame默認(rèn)的布局管理器是BorderLayout,默認(rèn)的添加組件的位置是BorderLayout.CENTER。 面板Panel不是一個獨立的窗口,只是窗口中的一個區(qū)域,因此,面板必須添加到窗體(Frame)中。面板是一個不可視的容器。,import java.awt.*; public class LayoutFrame extends Frame LayoutFrame() super(帶組件的窗體);/設(shè)置窗體標(biāo)題欄 setLayout(new Borde
11、rLayout();/設(shè)置布局管理器 /添加按鈕組件,并設(shè)置按鈕組件在容器中的位置 add(new Button(北), BorderLayout.NORTH);/上 add(new Button(南), BorderLayout.SOUTH);/下 add(new Button(西), BorderLayout.WEST);/左 add(new Button(東), BorderLayout.EAST);/右,例6-2 創(chuàng)建組件和設(shè)置布局管理器,/添加標(biāo)簽組件,文本標(biāo)簽中間對齊 add(new Label(Hello ,World !,Label.CENTER), BorderLayout.
12、CENTER); public static void main(String args) Frame frame= new LayoutFrame();frame.setSize(200,200);/設(shè)置窗體大小 frame.setVisible(true);/顯示窗體 ,6.1.2 容器和組件,知識點 向容器內(nèi)添加對象的方法如下: 容器對象.add(組件對象, 約束條件) 如:this.add(btnDisplayTime, BorderLayout.SOUTH); BorderLayout類中有5個靜態(tài)常量:EAST,WEST,SOUTH,NORTH,CENTER,這5個常量用于指定組件
13、在容器中的位置,分別表示東、西、南、北、中5個區(qū)域,這里的位置與地圖坐標(biāo)系相同,即上北、下南、左西、右東。 由于myClock本身就是一個容器類,因此,如果省略容器對象,則默認(rèn)是將組件添加到當(dāng)前類的實例中,所以上述語句也可以寫成: add(btnDisplayTime,BorderLayout.SOUTH);,6.1.3 標(biāo)簽組件,標(biāo)簽(Label)組件用來顯示一行靜態(tài)文本。靜態(tài)文本通常是不變的量,主要用于顯示提示信息。通過程序可以改變靜態(tài)文本的內(nèi)容,但用戶不能改變。Label組件沒有任何特殊的邊框和裝飾,通常不產(chǎn)生事件。 1Label組件構(gòu)造函數(shù) Label()創(chuàng)建不含文本標(biāo)簽的標(biāo)簽對象。
14、Label(String text)創(chuàng)建含文本標(biāo)簽的標(biāo)簽對象。 Label(String text, int alignment) 創(chuàng)建含文本標(biāo)簽和對齊方式的標(biāo)簽對象。,6.1.3 標(biāo)簽組件,2Label組件方法 getText()獲取標(biāo)簽的文本內(nèi)容。 setText(String text)設(shè)置標(biāo)簽的文本內(nèi)容。 3Label組件實例 Label lblName1 = new Label(張三,0); /0左對齊,1 中間對齊, 2右對齊 lblName1.getText(); /獲取標(biāo)簽lblName1的文本內(nèi)容 lblName2.setText(李六); /將標(biāo)簽lblName2的內(nèi)容改為
15、“李六”,6.1.4 文本域組件,文本域(TextField)組件可以用來顯示一行文本,它是圖形用戶界面經(jīng)常使用的輸入組件。當(dāng)按Enter鍵或者Return鍵時,監(jiān)聽器ActionListener可以通過actionPerformed()方法獲取這個事件。除了注冊一個ActionListener監(jiān)聽器,還可以注冊一個TextListener監(jiān)聽器來接收關(guān)于個別擊鍵的通知。 1TextField組件構(gòu)造函數(shù) TextField()創(chuàng)建顯示內(nèi)容為“空”的文本域?qū)ο蟆?TextField(int columns)創(chuàng)建具有指定寬度的文本域?qū)ο?TextField(String text)創(chuàng)建具有指定內(nèi)
16、容的文本域?qū)ο蟆?6.1.4 文本域組件,2TextField組件方法 getText()獲取文本域的內(nèi)容。 setText(String t)設(shè)置文本域的內(nèi)容。 setFont(Font f)設(shè)置文本域的字體。 3TextField組件實例 TextField txtName = new TextField(10); txtName.setFont(new Font(“宋體”,Font.BOLD,24); txtName.setText(張三); TextField txtSex = new TextField(男); String name = txtSex.getText(); Text
17、Field txtAge = new TextField(18);,6.1.5 按鈕組件,按鈕(Button)組件是圖形用戶界面設(shè)計經(jīng)常用到的組件,它提供了“按下并動作”的基本操作。通常構(gòu)造一個帶文本標(biāo)簽的按鈕,用來提示用戶這個按鈕的作用。,import java.awt.*; import java.awt.event.*; public class Calculater extends Frame Label lblCalculator = new Label(一個簡單的計算器界面 , Label.CENTER); TextField txtTitle = new TextField(20
18、); Panel pnlCal = new Panel(); Button btnAdd = new Button(加); Button btnMinus = new Button(減); Button btnMulti = new Button(乘); Button btnDivide = new Button(除);,例6-3標(biāo)簽、文本域和按鈕應(yīng)用實例,Calculater() super(一個簡單的計算器); setLayout(new GridLayout(3,1); add(lblCalculator); add(txtTitle); pnlCal.setLayout(new Flo
19、wLayout(); pnlCal.add(btnAdd); pnlCal.add(btnMinus); pnlCal.add(btnMulti); pnlCal.add(btnDivide); add(pnlCal); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); ,public static void main(String args) Frame frame= new Caltulater(); frame.setSize(200,130)
20、; frame.setLocationRelativeTo(null); frame.setVisible(true); ,6.1.5 按鈕組件,知識點 1Button組件構(gòu)造函數(shù) Button() 默認(rèn)構(gòu)造函數(shù),創(chuàng)建不帶文本標(biāo)簽的按鈕對象。 Button(String label) 創(chuàng)建帶文本標(biāo)簽的按鈕對象。 2Button組件實例 Button btn = new Button(確定);,6.1.6 復(fù)選框及復(fù)選框組組件,復(fù)選框(Checkbox)由一個文本標(biāo)簽和一個可選框組成,它提供一種簡單的“開/關(guān)”式輸入方法。復(fù)選框是一個可處于“開”(true)或“關(guān)”(false) 狀態(tài)的圖形組件
21、。單擊復(fù)選框可將其狀態(tài)從“開”更改為“關(guān)”,或從“關(guān)”更改為“開”。復(fù)選框組是復(fù)選框的一個集合。,import java.awt.*; import java.awt.event.*; public class Check_Box extends Frame Label label1 = new Label(復(fù)選框組); Label label2 = new Label(復(fù)選框); Checkbox checkbox1, checkbox2, checkbox3, checkbox4; Check_Box() addWindowListener(new WindowAdapter() publ
22、ic void windowClosing(WindowEvent e) System.exit(0);); setLayout(new GridLayout(2, 2); CheckboxGroup cbg = new CheckboxGroup(); /創(chuàng)建復(fù)選框組,例6-4 復(fù)選框及復(fù)選框組,/創(chuàng)建復(fù)選框并加到復(fù)選框組中 checkbox1 = new Checkbox(“男”, false, cbg); checkbox2 = new Checkbox(女, false, cbg); add(label1); add(checkbox1); add(checkbox2); checkb
23、ox3 = new Checkbox(老, false); checkbox4 = new Checkbox(少, false); add(label2); add(checkbox3); add(checkbox4); ,public static void main(String args) Check_Box frame = new Check_Box(); frame.setTitle(復(fù)選框及復(fù)選框組示例); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); ,6.1
24、.6 復(fù)選框及復(fù)選框組組件,知識點 1復(fù)選框 1) Checkbox組件構(gòu)造函數(shù) public Checkbox(String label, CheckboxGroup group, boolean state) 使用指定標(biāo)簽創(chuàng)建一個復(fù)選框,并使它處于指定復(fù)選框組內(nèi),將它設(shè)置為指定狀態(tài)。 label此復(fù)選框的字符串標(biāo)簽,如果沒有標(biāo)簽,則該參數(shù)為null; group此復(fù)選框的復(fù)選框組,如果沒有這樣的復(fù)選框組,則該參數(shù)為null; state此復(fù)選框的初始狀態(tài)。,6.1.6 復(fù)選框及復(fù)選框組組件,2) Checkbox組件方法 public void setCheckboxGroup(Check
25、boxGroup g) 將復(fù)選框的組設(shè)置為指定復(fù)選框組。如果復(fù)選框已經(jīng)在另一個復(fù)選框組中,則首先從那個組中提取該復(fù)選框。 如果此復(fù)選框的狀態(tài)為true,并且新組已經(jīng)有一個選定的復(fù)選框,則將此復(fù)選框的狀態(tài)更改為false。如果此復(fù)選框的狀態(tài)為true,并且新組中沒有選定的復(fù)選框,則此復(fù)選框?qū)⒊蔀樾陆M的選定復(fù)選框,并且其狀態(tài)為true。 參數(shù):g新復(fù)選框組,如果該參數(shù)為null,則從所有復(fù)選框組中移除此復(fù)選框 public void addItemListener(ItemListener l) 添加指定的監(jiān)聽器,以接收來自此復(fù)選框的事件。 參數(shù):l監(jiān)聽器。,6.1.6 復(fù)選框及復(fù)選框組組件,知識
26、點 2復(fù)選框組 復(fù)選框組(CheckboxGroup)用于對Checkbox集合進(jìn)行分組。單擊任何按鈕,可將按鈕狀態(tài)設(shè)置為開,并且強(qiáng)制將任何其他開狀態(tài)的按鈕更改為關(guān)狀態(tài) CheckboxGroup組件構(gòu)造方法: public CheckboxGroup() 以下代碼創(chuàng)建一個復(fù)選框組,其中有3個復(fù)選框: CheckboxGroup cbg = new CheckboxGroup(); add(new Checkbox(one, cbg, true); add(new Checkbox(two, cbg, false); add(new Checkbox(three, cbg, false);,6
27、.1.7 文本區(qū)組件,文本區(qū)(TextArea)組件是顯示多行文本的區(qū)域??梢詫⑺O(shè)置為允許編輯或只讀。 1TextArea組件構(gòu)造方法 public TextArea(String text, int rows, int columns, int scrollbars) 構(gòu)造一個新文本區(qū),該文本區(qū)具有指定的文本以及指定的行數(shù)、列數(shù)和滾動條可見性。 TextArea 類定義了一些可以作為scrollbars參數(shù)值的常量: SCROLLBARS_BOTH垂直和水平; SCROLLBARS_VERTICAL_ONLY僅垂直; SCROLLBARS_HORIZONTAL_ONLY僅水平; SCROL
28、LBARS_NONE垂直和水平都沒有。,6.1.7 文本區(qū)組件,參數(shù): text要顯示的文本,如果text為null,則顯示空字符串 ; rows行數(shù),如果rows小于0,則將rows設(shè)置為0; columns列數(shù),如果columns小于0,則將columns設(shè)置為0; scrollbars確定為查看文本區(qū)創(chuàng)建的滾動條類型的常量。,6.1.7 文本區(qū)組件,2TextArea組件方法 1)public void insert(String str, int pos) 在文本區(qū)的指定位置插入指定文本。 參數(shù): str要插入的非null文本; pos插入的位置。 2)public void appe
29、nd(String str) 將給定文本追加到文本區(qū)已有文本之后。 參數(shù): str要追加的非 null 文本。,6.1.8 面板組件,面板(Panel)是最簡單也是非常重要的容器類??梢詫⑵渌M件放在面板提供的空間內(nèi),這些組件還可是其他容器。面板是一個無形的容器,它的作用主要用于窗口布局和繪制圖形。 面板的默認(rèn)布局管理器是FlowLayout布局管理器。,import java.awt.*; import java.awt.event.*; public class Text_Area extends Frame implements ActionListener TextField txtI
30、nput = new TextField(,30);/創(chuàng)建文本域?qū)嵗?TextArea txa = new TextArea();/創(chuàng)建文本區(qū)實例 Button btnOK = new Button(確定); Panel panel = new Panel();/創(chuàng)建面板實例 Text_Area() addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););,例6-5 文本區(qū)及面板的應(yīng)用,this.setLayout(new BorderLayout();/窗口
31、布局管理器 panel.setLayout(new FlowLayout();/面板的布局管理器 btnOK.addActionListener(this); /為按鈕注冊監(jiān)聽器 panel.add(txtInput); panel.add(btnOK); this.add(panel,BorderLayout.NORTH); this.add(txa,BorderLayout.CENTER); public void actionPerformed(ActionEvent e) txtInput.requestFocus(); txa.append(txtInput.getText()+n)
32、; txtInput.setText(); ,public static void main(String args) Text_Area frame = new Text_Area(); frame.setTitle(文本區(qū)及面板示例); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); ,6.1.8 面板組件,知識點 1Panel組件構(gòu)造函數(shù) public Panel() 使用默認(rèn)的布局管理器創(chuàng)建新面板。默認(rèn)布局管理器是FlowLayout。 public Panel(La
33、youtManager layout) 創(chuàng)建具有指定布局管理器的新面板。 參數(shù): layout此面板的布局管理器。,6.1.8 面板組件,2Panel組件方法 public Component add(Component comp) 將指定組件添加到此容器的尾部。當(dāng)布局管理器是FlowLayout時,組件按從左到右的順序追加,一行到頭時自動換行。如果布局管理器是GridLayout,也是按照流水順序追加,從左到右,從上到下,不能跳躍追加。 參數(shù): comp要添加的組件。,6.1.9 布局管理器,只有容器類組件才有布局管理器,每種布局管理器都有自己特定的擺放規(guī)則,容器的setLayout()方法
34、可以設(shè)置布局管理器的擺放規(guī)則。 布局管理器主要用于排版,也就是確定組件在容器內(nèi)的大小和位置。通常情況下,每種容器都被指定了一個默認(rèn)的布局管理器,如Panel的默認(rèn)布局管理器為FlowLayout,F(xiàn)rame的默認(rèn)布局管理器為BorderLayout。每個容器都是java.awt.Container的子類,可使用容器的setLayout()方法指定容器的布局管理器的擺放規(guī)則。布局管理器可以隨窗口的改變而調(diào)整組件的位置和大小。,6.1.9 布局管理器,java.awt包提供的5種主要布局管理器 1流布局管理器 流布局管理器(FlowLayout)按照從左到右的順序來排列組件,當(dāng)一行排滿后自動排在下
35、一行。 1) FlowLayout構(gòu)造方法 public FlowLayout() 構(gòu)造一個新的 FlowLayout,居中對齊,默認(rèn)的水平和垂直間隙是5個單位。 public FlowLayout(int align) 構(gòu)造一個新的 FlowLayout,對齊方式是指定的,默認(rèn)的水平和垂直間隙是5個單位。,6.1.9 布局管理器,2) FlowLayout主要方法 public void setAlignment(int align) 設(shè)置此布局的對齊方式??赡艿闹禐椋篎lowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.
36、LEADING、FlowLayout.TRAILING。 參數(shù): align上面所示的對齊值之一。,6.1.9 布局管理器,2邊界線布局管理器 邊界布局管理器(BorderLayout)可以對容器中的組件進(jìn)行排版,并自動調(diào)整其大小,使其符合下列5個區(qū)域:東、西、南、北、中。每個區(qū)域最多只能包含一個組件,并通過相應(yīng)的常量進(jìn)行標(biāo)識:NORTH、SOUTH、EAST、WEST和CENTER,這5個常量是靜態(tài)的,因此可以通過類名引用。 當(dāng)使用邊界布局管理器將一個組件添加到容器中時,要使用這5個常量之一,默認(rèn)為CENTER。,6.1.9 布局管理器,1) BorderLayout構(gòu)造方法 public
37、BorderLayout() 構(gòu)造一個組件之間沒有間距的新邊界布局。 public BorderLayout(int hgap, int vgap) 用指定的組件之間的間距構(gòu)造一個邊界布局。水平間距由hgap指定,而垂直間距由vgap指定。 參數(shù): hgap水平間距; vgap垂直間距。,6.1.9 布局管理器,2) BorderLayout示例 Panel p1 = new Panel(); P1.setLayout(new BorderLayout(); P1.add(new Button(Okay), BorderLayout.SOUTH); Panel p2 = new Panel()
38、; p2.setLayout(new BorderLayout(); p2.add(new TextArea();,6.1.9 布局管理器,3網(wǎng)格布局管理器 網(wǎng)格布局管理器(GridLayout)以矩形網(wǎng)格的形式對容器內(nèi)的組件進(jìn)行擺放。容器被分成大小相等的規(guī)則矩形,一個矩形中放置一個組件。,import java.awt.*; import java.applet.Applet; public class ButtonGrid extends Applet public void init() setLayout(new GridLayout(2,3); add(new Button(1);
39、add(new Button(2); add(new Button(3); add(new Button(4); add(new Button(5); add(new Button(6); ,6-6 將6個按鈕布置到2行3列中,6.1.9 布局管理器,知識點 1) GridLayout構(gòu)造方法 public GridLayout(int rows, int cols) 創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局。布局中的所有組件分配相同的大小空間。 rows和cols中的一個可以為0(但不能兩者同時為0),表示可以將任何數(shù)目的對象置于行或列中。 參數(shù): rows該rows具有表示任意行數(shù)的值0; col
40、s該cols具有表示任意列數(shù)的值0。,6.1.9 布局管理器,2) GridLayout方法 public int getRows() 獲取此布局中的行數(shù)。 public void setRows(int rows) 將此布局中的行數(shù)設(shè)置為指定值。 public int getColumns() 獲取此布局中的列數(shù)。 public void setColumns(int cols) 將此布局中的列數(shù)設(shè)置為指定值。,6.1.9 布局管理器,4卡片布局管理器 卡片布局管理器(CardLayout)將容器中的每個組件看作一張卡片。一次只能看到一張卡片,而容器則充當(dāng)卡片的堆棧。容器的作用就像一疊卡片。
41、當(dāng)容器第一次顯示時,第一個添加到CardLayout對象的組件為可見組件。 卡片的順序由組件對象本身在容器內(nèi)部的順序決定。CardLayout定義了一組方法,這些方法允許應(yīng)用程序按順序瀏覽這些卡片,或者顯示指定的卡片,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Card_Layout extends JPanel implements ActionListener CardLayout card = new CardLayout(30, 30); JButton button; p
42、ublic Card_Layout() setLayout(card); for (int i = 1; i = 5; i+) button = new JButton(卡片上第 + i + 個按鈕);/按鈕文本,例6-7 CardLayout應(yīng)用示例,add(button, Card + i); /按鈕添加到卡片上 button.addActionListener(this);/注冊監(jiān)聽器 public void actionPerformed(ActionEvent e) /事件處理 card.next(this); /切換到下一張卡片 public static void main(St
43、ring args) JFrame frame = new JFrame(CardLayout應(yīng)用示例); frame.setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE); frame.getContentPane().add(new Card_Layout(); frame.setBounds(30, 30, 400, 300); frame.setLocationRelativeTo(null); frame.setVisible(true); ,6.1.9 布局管理器,知識點 1) CardLayout構(gòu)造方法 public CardLayou
44、t() 創(chuàng)建一個間隙大小為 0 的新卡片布局。 public CardLayout(int hgap, int vgap) 創(chuàng)建一個具有指定的水平和垂直間隙(距容器邊緣)的新卡片布局。水平間隙置于左右邊緣。垂直間隙置于上下邊緣。 參數(shù): hgap水平間隙; vgap垂直間隙。,6.1.9 布局管理器,2) CardLayout方法 public void first(Container parent) 翻轉(zhuǎn)到容器的第一張卡片。 參數(shù): parent要在其中進(jìn)行布局的父容器。 public void next(Container parent) 翻轉(zhuǎn)到指定容器的下一張卡片。如果當(dāng)前的可見卡片是最
45、后一個,則此方法翻轉(zhuǎn)到布局的第一張卡片。 參數(shù): parent要在其中進(jìn)行布局的父容器。,6.1.9 布局管理器,public void previous(Container parent) 翻轉(zhuǎn)到指定容器的前一張卡片。如果當(dāng)前的可見卡片是第一個,則此方法翻轉(zhuǎn)到布局的最后一張卡片。 參數(shù): parent要在其中進(jìn)行布局的父容器。 public void last(Container parent) 翻轉(zhuǎn)到容器的最后一張卡片。 參數(shù): parent要在其中進(jìn)行布局的父容器。,6.1.9 布局管理器,5網(wǎng)格包布局管理器 網(wǎng)格包布局管理器(GridBagLayout)是一個靈活的布局管理器,與Gri
46、dLayout布局管理器不同之處是將組件垂直和水平對齊時不需要組件的大小相同。每個GridBagLayout對象維持一個將組件垂直和水平對齊的矩形單元網(wǎng)格,每個組件占用一個或多個這樣的單元,稱為顯示區(qū)域。 每個由GridBagLayout管理的組件都與GridBagConstraints的實例相關(guān)聯(lián)。Constraints 對象指定組件在網(wǎng)格中的顯示區(qū)域及其在顯示區(qū)域中的放置方式。,6.1.9 布局管理器,知識點 1) GridBagLayout構(gòu)造方法 public GridBagLayout() 創(chuàng)建網(wǎng)格包布局管理器。 2) GridBagConstraints構(gòu)造方法 public Gr
47、idBagConstraints() 創(chuàng)建一個GridBagConstraint對象,將其所有字段都設(shè)置為默認(rèn)值。,6.1.10 下拉列表框組件,下拉列表框(Choice)提供下拉列表,它可以看作是一個彈出式選擇菜單。當(dāng)前的選擇顯示為菜單的標(biāo)題。,public class DropdownList extends Frame implements ItemListener Choice CityChooser = new Choice(); Label label1 = new Label(您選擇的城市是:); Label label2 = new Label(); Panel panel =
48、 new Panel(); DropdownList() addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );,例6-9下拉列表框示例,panel.setLayout(new GridLayout(2,1); panel.add(label1); panel.add(label2); add(panel, BorderLayout.NORTH); CityChooser.add(“上海市”);CityChooser.add(杭州市); CityChoos
49、er.add(南京市); add(CityChooser, BorderLayout.CENTER); CityChooser.addItemListener(this); public void itemStateChanged(ItemEvent e) int intSelectedIndex = CityChooser.getSelectedIndex(); String s = CityChooser.getItem(intSelectedIndex); label2.setText(s); ,6.1.10 下拉列表框組件,知識點 1Choice構(gòu)造方法 public Choice()
50、 throws HeadlessException 創(chuàng)建一個新的Choice菜單。在默認(rèn)情況下,在用戶通過調(diào)用select方法進(jìn)行不同的選擇之前,給Choice菜單添加的第一個項將成為選定項。 2Choice方法 public void add(String item) 將一個項添加到此Choice菜單中。 參數(shù): item要添加的項。,6.1.10 下拉列表框組件,public void insert(String item, int index) 將一個項插入此Choice菜單的指定位置上。如果index大于或等于此選擇中項的數(shù)目,則將item添加到此Choice菜單的結(jié)尾處。 參數(shù): i
51、tem將插入的非null項; index應(yīng)該插入項的位置。,6.1.10 下拉列表框組件,public void addItemListener(ItemListener l) 添加指定項監(jiān)聽器,以接收來自此Choice菜單的項事件。通過發(fā)送項事件來響應(yīng)用戶輸入,但不響應(yīng)對select的調(diào)用。如果l為 null,則不會拋出異常,并且不執(zhí)行任何操作。 參數(shù): l - 項監(jiān)聽器。,6.1.11 列表框組件,列表框(List)組件可提供一個可滾動的文本項列表。List組件允許用戶進(jìn)行單項或多項選擇。,import java.awt.*; import java.awt.event.*; public
52、 class MyList extends Frame implements ItemListener List lst = new List();/創(chuàng)建列表框?qū)嵗?TextArea txa = new TextArea(); MyList() setLayout(new GridLayout(1, 2); lst.add(中華人民共和國);/為列表框增加項目 lst.add(美國); lst.add(俄羅斯); lst.add(英國); lst.add(德國); lst.add(加拿大); lst.add(巴西); lst.add(西班牙); lst.add(阿根廷); lst.addIte
53、mListener(this); /為列表框注冊監(jiān)聽器,例6-10 列表框示例,add(lst); add(txa); public void itemStateChanged(ItemEvent e) txa.append(lst.getItem(lst.getSelectedIndex() + n); public static void main(String args) MyList frame = new MyList(); frame.setTitle(列表框示例); frame.setSize(300, 200); frame.setLocationRelativeTo(null
54、); frame.setVisible(true); ,6.1.11 列表框組件,知識點 1List構(gòu)造方法 public List() 創(chuàng)建新的滾動列表。在默認(rèn)情況下,有4個可視行,并且不允許多項選擇。 public List(int rows, boolean multipleMode) 創(chuàng)建一個初始化為顯示指定行數(shù)的新滾動列表。注意,如果指定了0行,則會按默認(rèn)的4行創(chuàng)建列表 參數(shù): rows要顯示的項數(shù); multipleMode如果為true,則允許多項選擇。,6.1.11 列表框組件,public void add(String item) 向滾動列表的末尾添加指定的項。 Item要
55、添加的項。 public void add(String item, int index) 向滾動列表中索引指定的位置添加指定的項。索引是從0開始的。如果索引值小于0,或者索引值大于或等于列表中的項數(shù),則將該項添加到列表的末尾。 item要添加的項,如果此參數(shù)為 null,則該項被視為空字符串; index要添加項的位置。,6.1.11 列表框組件,public void addActionListener(ActionListener l) 為列表框添加監(jiān)聽器。當(dāng)用戶雙擊列表項時或者在此列表具有鍵盤焦點時按Enter鍵,將發(fā)生事件并交由監(jiān)聽器處理。 如果監(jiān)聽器l為null,則不會拋出異常,并
56、且不執(zhí)行操作。 l監(jiān)聽器。 public String getSelectedItem() 獲取此滾動列表中選中的項。 返回: 列表中選中的項。如果沒有選中的項,或者選中了多項,則返回null。,6.1.12 滾動窗格組件,滾動窗格(ScrollPane)是用于實現(xiàn)單個組件自動水平、垂直滾動的容器類。其顯示策略可設(shè)置為以下3種。 (1) as needed: 創(chuàng)建滾動條,且只在滾動窗格需要時顯示。 (2) always: 創(chuàng)建滾動條,且滾動窗格總是顯示滾動條。 (3) never: 滾動窗格永遠(yuǎn)不創(chuàng)建或顯示滾動條。,6.1.12 滾動窗格組件,1ScrollPane構(gòu)造方法 public Sc
57、rollPane() 創(chuàng)建一個具有滾動條策略as needed的新滾動窗格容器。 public ScrollPane(int scrollbarDisplayPolicy) 創(chuàng)建新的滾動窗格容器。 參數(shù): scrollbarDisplayPolicy顯示滾動條時使用的策略,可以取SCROLLBARS_ALWAYS、SCROLLBARS_AS_NEEDED、SCROLLBARS_NEVER。,6.1.12 滾動窗格組件,2ScrollPane方法 public Component add(Component comp) 將指定組件追加到此容器的尾部。 參數(shù): comp要添加的組件。 3Scrol
58、lPane示例 ScrollPane scp = new ScrollPane(); Scp.add(list);/list為List對象,6.1.13 菜單欄、菜單、菜單項組件,菜單欄(MenuBar):位于標(biāo)題欄下的一行,是所有菜單的集合。菜單欄由菜單組成。 菜單(Menu):菜單欄中某一菜單(如“文件”)。菜單由菜單項組成。 菜單項(MenuItem):菜單中具體的一項,如“文件”菜單中的“打開”。,import java.awt.*; import java.awt.event.*; public class MyMenu extends Frame implements Action
59、Listener private String mnuName = 登錄,添加,查詢,刪除,更新,退出; public MyMenu() addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0);); MenuBar mnuBar = new MenuBar();/菜單欄 setMenuBar(mnuBar);/將此Frame的菜單欄設(shè)置為指定的菜單欄 Menu mnuLogin = new Menu(mnuName0);/菜單 MenuItem admin = new MenuItem(管理員);/菜單項 admin.addActionListener(this);/為菜單項注冊監(jiān)聽器 mnuLogin.add(admin);/將菜單項加到菜單上 MenuItem teacher = new MenuItem(教師); admin.addActionListener(this); mn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026陜西漢中市鐵路中心醫(yī)院招聘醫(yī)學(xué)檢驗技師考試備考題庫附答案
- 2026青海海北州門源縣扶貧開發(fā)投資有限公司招聘1人備考題庫附答案
- 2026江蘇南京鼓樓醫(yī)院招聘衛(wèi)技人員340考試備考題庫附答案解析
- 2026重慶永川法院招聘書記員2人參考題庫附答案
- 北京市海淀區(qū)衛(wèi)生健康委員會所屬事業(yè)單位面向社會招聘14人備考題庫完美版
- 四川中煙工業(yè)有限責(zé)任公司2026年度員工招聘參考題庫完美版
- 中國標(biāo)準(zhǔn)化研究院質(zhì)量研究分院信用標(biāo)準(zhǔn)化研究崗企業(yè)編制職工招聘2人備考題庫新版
- 德陽市旌陽區(qū)教育和體育局關(guān)于公開考核招聘教師的(25人)備考題庫新版
- 2026青海玉樹市人民醫(yī)院面向社會招聘編外聘用工作人員的招聘2人備考題庫附答案
- 2026阿拉善盟急需緊缺人才專業(yè)需求目錄備考題庫新版
- 《乘用車白車身輕量化設(shè)計與評價方法》
- 鑄造行業(yè)技術(shù)研發(fā)管理制度
- 中頻治療儀的操作流程
- 《弱電知識培訓(xùn)》課件
- 托兒所幼兒園衛(wèi)生保健工作規(guī)范
- 137案例黑色三分鐘生死一瞬間事故案例文字版
- 《同步備課:太陽能小臺燈》參考課件
- 直腸陰道瘺診療指南的更新
- 五年級數(shù)學(xué)上冊人教版第六單元《多邊形的面積》(單元解讀)
- 日立HGP電梯調(diào)試
- 病案管理考核標(biāo)準(zhǔn)表格2022版
評論
0/150
提交評論