Java語言程序設(shè)計(jì)(第二版)課件第11章 圖形用戶界面設(shè)計(jì)_第1頁
Java語言程序設(shè)計(jì)(第二版)課件第11章 圖形用戶界面設(shè)計(jì)_第2頁
Java語言程序設(shè)計(jì)(第二版)課件第11章 圖形用戶界面設(shè)計(jì)_第3頁
Java語言程序設(shè)計(jì)(第二版)課件第11章 圖形用戶界面設(shè)計(jì)_第4頁
Java語言程序設(shè)計(jì)(第二版)課件第11章 圖形用戶界面設(shè)計(jì)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

圖形用戶界面設(shè)計(jì)第11章2目標(biāo)GUI相關(guān)概念布局管理器事件處理常用Swing組件

311.1.1GUI包和簡單GUI程序2-11.java.awt包稱為抽象窗口工具集AWT(AbstractWindowToolkit),是使用Java進(jìn)行GUI設(shè)計(jì)的基礎(chǔ)。2.javax.swing包Swing組件存放在javax.swing包中。幾乎所有AWT組件對應(yīng)有新功能更強(qiáng)的Swing組件。另外還加入了一些全新的組件。Swing組件在名稱上前面多了一個字母“J”。411.1.1GUI包和簡單GUI程序2-23.設(shè)置GUI應(yīng)用程序的流程:(1)引用需要的包和類。(2)設(shè)置一個頂層的容器。(3)根據(jù)需要為容器設(shè)置布局管理器或使用默認(rèn)布局管理器。(4)將組件添加到容器內(nèi),位置自行設(shè)計(jì)。(5)為響應(yīng)事件的組件編寫事件處理代碼。511.1.2容器、組件、布局和觀感1.容器和組件組件是可以用圖形化的方式顯示在屏幕上并能夠與用戶進(jìn)行交互的對象。容器是一種特殊的組件,一種能夠容納其他組件或容器的組件。2.布局管理器為了使圖形用戶界面具有良好的平臺無關(guān)性,提供了專門用來管理組件在容器中的布局的工具。3.觀感決定swing應(yīng)用程序的外觀。611.2布局管理器Java中的布局類型包括以下幾種:FlowLayout(流式布局)BorderLayout(邊界布局)GridLayout(網(wǎng)格布局)CardLayout(卡片布局)

GridBagLayout(網(wǎng)格包布局)711.2.1FlowLayout布局管理器FlowLayout的構(gòu)造函數(shù)有:FlowLayout():生成一個默認(rèn)的流式布局FlowLayout(intalignment):可以設(shè)定每一行組件的對齊方式FlowLayout(intalignment,inthorz,intvert):可以設(shè)定組件間的水平和垂直距離

Applet和面板的缺省布局組件從左上角開始按從左到右、從上到下的方式排列FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//為容器設(shè)置新布局

811.2.2BorderLayout布局管理器下面是BorderLayout所定義的構(gòu)造函數(shù):-BorderLayout():生成默認(rèn)的邊界布局-BorderLayout(inthorz,intvert):可以設(shè)定組件間的水平和垂直距離窗口、框架和對話框等的缺省布局組件被置于容器的北、南、東、西或中間位置...setLayout(newBorderLayout());

ButtonbtnEast=newButton("東");

ButtonbtnWest=newButton("西");

ButtonbtnNorth=newButton("北");

ButtonbtnSouth=newButton("南");

ButtonbtnCenter=newButton("中");

add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);911.2.3GridLayout布局管理器GridLayout的構(gòu)造函數(shù)如下所示:

-

GridLayout():生成一個單列的網(wǎng)格布局-GridLayout(introw,intcol):生成一個設(shè)定行數(shù)和列數(shù)的網(wǎng)格布局-GridLayout(introw,intcol,inthorz,intvert):可以設(shè)置組件之間的水平和垂直間隔用于將容器區(qū)域劃分為一個矩形網(wǎng)格組件按行和列排列...

Buttonbtn[];//聲明按鈕數(shù)組

Stringstr[]={"1","2","3","4","5","6","7","8","9"};setLayout(newGridLayout(3,3));btn=newButton[str.length];//創(chuàng)建按鈕數(shù)組for(inti=0;i<str.length;i++){

btn[i]=newButton(str[i]);add(btn[i]);}1011.2.4CardLayout布局管理器可存儲幾個不同的布局。每個布局就像是一個卡片組中的一張卡片。在一個給定的時間總會有一張卡片在頂層??ㄆǔ橐粋€Panel對象。每當(dāng)需要許多面板切換,而每個面板需要顯示為不同布局時,可以使用卡片布局。1111.2.5GridBagLayout布局管理器通過使用以下語法容器可獲得GridBagLayout:GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必須提供各組件的大小和布局等信息。GridBagConstraints類中包含GridBagLayout類用來定位及調(diào)整組件大小所需的全部信息。組件大小不必相同組件按行和列排列放置順序不一定為從左至右和由上至下12GridBagConstraints類2-1成員變量列表:gridx,gridy:指定組件放置于哪個單元中g(shù)ridwidth,gridheight:指定組件將占用多少行和多少列weightx,weighty:指定在一個GridBagLayout中應(yīng)如何分配空間,這些變量的缺省值為0ipadx,ipady:指定組件的最小高度和寬度13成員變量列表:fill:指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONEanchor:指定將組件放置在單元中的位置,共有9個可選值。缺省值為:GridBagConstraints.CENTER

GridBagConstraints類2-21411.2.6swing布局管理器1.BoxLayout布局管理器

按照從上到下(即Y軸)或者從左到右(即X軸)的順序來依次排列組件。2.ScrollPaneLayout布局管理器是JScrollPane中的內(nèi)置布局管理器,所以不需要單獨(dú)創(chuàng)建,會自動設(shè)置。1511.2.7Null布局管理器在某些情況下,用戶不想使用布局管理器,需要自己設(shè)置組件的位置和大小,這時應(yīng)取消容器的布局管理器,然后再進(jìn)行設(shè)置,否則用戶自定義設(shè)置將會被布局管理器覆蓋。取消布局管理器的方法是:

setLayout(null);用戶使用setLocation()、setSize()、setBounds()等方法為組件設(shè)置位置和大小。需要注意的是,這種方法會導(dǎo)致程序與系統(tǒng)相關(guān),如不同的分辨率會產(chǎn)生不同的效果。1611.3.1事件處理模型Java最新的事件處理方法是基于授權(quán)事件模型當(dāng)事件來源對象因用戶的操作(鼠標(biāo)或鍵盤),系統(tǒng)會自動觸發(fā)此事件類對象E,并通知所授權(quán)的事件監(jiān)聽者A(若來源對象已向A注冊),事件監(jiān)聽者A中有處理各種事件的方法(事件處理者1~n)便會處理此事件E的各種狀況。1711.3.2事件層次結(jié)構(gòu)2-1事件類說明事件源ActionEvent通常按下按鈕,雙擊列表項(xiàng)或選中一個菜單項(xiàng)時,就會生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操縱滾動條時會生成此事件。ScrollbarComponentEvent當(dāng)一個組件移動、隱藏、調(diào)整大小或成為可見時會生成此事件。ComponentItemEvent單擊復(fù)選框或列表項(xiàng)時,或者當(dāng)一個選擇框或一個可選菜單的項(xiàng)被選擇或取消時生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent組件獲得或失去鍵盤焦點(diǎn)時會生成此事件。Component1811.3.2事件層次結(jié)構(gòu)2-2事件類說明事件源KeyEvent接收到鍵盤輸入時會生成此事件。ComponentMouseEvent拖動、移動、單擊、按下或釋放鼠標(biāo)或在鼠標(biāo)進(jìn)入或退出一個組件時,會生成此事件。ComponentContainerEvent將組件添加至容器或從中刪除時會生成此事件。ContainerTextEvent在文本區(qū)或文本域的文本改變時會生成此事件。TextField、TextAreaWindowEvent當(dāng)一個窗口激活、關(guān)閉、失效、恢復(fù)、最小化、打開或退出時會生成此事件。

Window1911.3.3事件處理方法

實(shí)現(xiàn)事件監(jiān)聽器接口法:首先給組件注冊監(jiān)聽器,使用下列方法:

addxxxListener(事件監(jiān)聽器對象);

確定了事件監(jiān)聽器的類型后,必須在程序中定義類來實(shí)現(xiàn)這些接口,重寫接口中的所有方法。addKeyListener(newCharType());

publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括號中為處理事件的代碼publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法體為空publicvoidkeyTyped(KeyEvente){}}

2011.3.4事件適配器

使用實(shí)現(xiàn)事件監(jiān)聽器接口的方法處理事件時,必須重寫監(jiān)聽器接口中的所有方法,盡管有些方法不會用到。繼承事件適配器類,只需要重寫所需要的方法即可。addKeyListener(newCharType());

為事件源注冊事件監(jiān)聽器的方法同上。publicclassCharTypeextendsKeyAdapter{publicvoidkeyPressed(KeyEvente){……}//大括號中為處理事件的代碼}}

2111.4.1常用容器組件3-1

是放置其他

Swing組件的頂級容器JFrame組件用于在Swing程序中創(chuàng)建窗體它的構(gòu)造函數(shù):JFrame()JFrame(StringTitle)組件必須添加至內(nèi)容窗格,而不是直接添加至JFrame對象,示例:

frame.getContentPane().add(b);2211.4.1常用容器組件3-2JPanel組件是一個中間容器用于將小型的輕量級組件組合在一起JPanel的缺省布局為FlowLayoutJPanel具有下列構(gòu)造函數(shù):JPanel()JPanel(LayoutManagerlm)2311.4.1常用容器組件3-3

JApplet也是一種窗口容器,繼承自Applet類,Applet小程序是另一種Java程序,與Applet不同的是,它默認(rèn)的布局管理器是JAppletBorderLayout,而Applet默認(rèn)的布局管理器是FlowLayout。可直接向Applet窗口中添加組件,但JApplet不行,添加組件時必須添加到其內(nèi)容窗格中。得到內(nèi)容窗格使用方法:

getContentPane();2411.4.2標(biāo)簽(JLabel)它既可以顯示文本也可以顯示圖像構(gòu)造函數(shù)如下:JLabel(Iconicon):icon表示使用的圖標(biāo)JLabel(Stringtext,Iconicon,intalign):text表示使用的字符串;icon表示使用的圖標(biāo);align表示水平對齊方式,其值可以為:LEFT、RIGHT、CENTER。其它常用方法

getText()setText(Stringtext)2511.4.3按鈕(JButton)可以使用以下任一構(gòu)造函數(shù)來創(chuàng)建按鈕:JButton():新建一個空的按鈕JButton(Iconicon)JButton(Stringtext)JButton(Stringtext,Iconicon)JButtonbtnOk=newJButton("確定!");JButtonbtnCancel=newJButton("取消!");

getContentPane.add(btnOk);getContentPane.add(btnCancel);2611.4.4文本框--JTextFieldJTextField組件允許輸入或編輯單行文本此類的構(gòu)造函數(shù)包括:JTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns)…Containercon=getContentPane();con.setLayout(newFlowLayout());JLabeljl=newJLabel(“文本域”);con.add(jl);JTextFieldtf=newJTextField(20);con.add(tf);

…2711.4.4文本框--JPasswordFieldJPasswordField組件允許輸入或編輯單行文本,并且文本被其他字符代替。此類的構(gòu)造函數(shù)與單行文本框類似。其它方法:char[]getPassword()chargetEchoChar()voidsetEchoChar(charc)2811.4.4文本框--JTextAreaJTextArea組件用于接受來自用戶的多行文本它可實(shí)現(xiàn)可滾動界面JTextArea組件可使用下列構(gòu)造函數(shù)創(chuàng)建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols)JTextArea(Documentdoc)JTextArea(Documentdoc,Stringtext,introws,intcols)…JLabeljl=newJLabel(“文本區(qū)”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);

…2911.4.5復(fù)選框-JCheckBox復(fù)選框用于為用戶提供一組選項(xiàng)JCheckBox類具有下列構(gòu)造函數(shù):JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)3011.4.6單選按鈕-JRadioButton單選按鈕允許用戶從多個選項(xiàng)中選擇其中一個ButtonGroup用于在Swing中創(chuàng)建組JRadioButton對象可使用下列構(gòu)造函數(shù)創(chuàng)建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)3111.4.7列表框-JListpublicJList():使用空模型構(gòu)造JListpublicJList(ListModeldataModel)

:構(gòu)造一個列表,用它顯示指定模型中的元素。

publicJList(Object[]listData)

:構(gòu)造一個列表以顯示指定數(shù)組listData的元素。

JList不支持滾動。要啟用滾動,可使用下列代碼:JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.getViewport().setView(dataList);…Stringstars[]={"安東尼奧.班德拉斯","來昂納多.迪卡普尼奧","桑德拉.布洛克","休.格蘭特","朱莉亞.羅伯茨"};JListmoviestars=newJList(stars);…3211.4.8組合框-JComboBox文本域和下拉列表的組合在Swing中,組合框由JComboBox表示構(gòu)造函數(shù)如下:publicJComboBox():此構(gòu)造函數(shù)使用缺省數(shù)據(jù)模型創(chuàng)建JComboBoxpublicJComboBox(ComboBoxModelasModel):使用現(xiàn)有ComboBoxModel中的項(xiàng)目的組合框publicJComboBox(Object[]items):包含指定數(shù)組元素的組合框…Stringnames[]={"弗雷德里克.福西斯","約翰.克里沙姆","瑪麗.希金斯.克拉克","帕特麗夏.康威爾"};JComboBoxauthors=newJComboBox(names);…3311.4.9滑塊-JSliderJSlider():創(chuàng)建滑塊默認(rèn)范圍為0至100水平方向JSlider(intorientation):創(chuàng)建范圍為0至100,初值為50,水平或垂直滑塊。方向取值為JSlider.HORIZONTAL(水平方向)或JSlider.VERTICAL(垂直方向)。JSlider(intmin,intmax):創(chuàng)建范圍從min至max,初值min和max的平均值的水平滑塊。JSlider(intmin,intmax,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論