第9章圖形用戶(hù)界面
《第9章圖形用戶(hù)界面》由會(huì)員分享,可在線閱讀,更多相關(guān)《第9章圖形用戶(hù)界面(78頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、圖形用戶(hù)界面圖形用戶(hù)界面(GUI)主要內(nèi)容主要內(nèi)容lGUI概述lJava圖形APIl容器及布局管理l輔助類(lèi)l事件處理lSwing用戶(hù)界面組件GUI概述概述lGUIGraphic User Interfacel構(gòu)成:l抽象窗口工具集AWT(Abstract Window Toolkit)對(duì)運(yùn)行的各平臺(tái),組件通過(guò)各自的代理映射成平臺(tái)特定組件適用于簡(jiǎn)單的GUI程序,對(duì)復(fù)雜的GUI項(xiàng)目不適用容易發(fā)生平臺(tái)特定故障重型組件lSwing組件庫(kù)大多數(shù)組件直接使用Java代碼編寫(xiě)更少依賴(lài)目標(biāo)機(jī)器上的平臺(tái)、本地資源輕型組件lApplet單獨(dú)介紹GUI概述概述lGUIGraphic User Interfacel說(shuō)
2、明:lSwing組件不能取代AWT的全部類(lèi)能替代AWT的用戶(hù)界面組件(Button、TextField等)輔助類(lèi)(Graphics、Color、Font、FontMetrics、LayoutManager)保持不變使用AWT的事件模型l課程介紹方式:AWT中仍被Swing使用的內(nèi)容:容器和LayoutManager事件模型輔助類(lèi)的使用繪圖Swing組件基本用法各組件展開(kāi)簡(jiǎn)介Java圖形圖形APIlJava圖形程序設(shè)計(jì)所用類(lèi)的層次結(jié)構(gòu)包java.awt中的類(lèi)包javax.swing中的swing組件Java圖形圖形APIlJava圖形程序設(shè)計(jì)所用類(lèi)的層次結(jié)構(gòu)Java圖形圖形APIlJava圖形程
3、序設(shè)計(jì)所用類(lèi)的層次結(jié)構(gòu)l說(shuō)明:lComponent:所有用戶(hù)界面類(lèi)的父類(lèi)lContainer:對(duì)組件分組的類(lèi)lJComponent:所有輕型Swing組件的父類(lèi)l圖形類(lèi):l容器類(lèi)l組件類(lèi)l輔助類(lèi)容器及布局管理容器及布局管理lContainer類(lèi):抽象類(lèi)lWindow、Frame、JFramel不依賴(lài)于其他容器而獨(dú)立存在的容器l使用步驟:l構(gòu)造函數(shù)創(chuàng)建實(shí)例l激活容器的add方法追加其他組件l激活容器的setLayout方法進(jìn)行布局設(shè)置l激活setSize方法設(shè)置容器大小l激活setVisible(true)方法使其可見(jiàn)lPanel、Applet、JAppletl不能單獨(dú)存在,只能存在于其他容器中
4、l用法類(lèi)似于獨(dú)立容器,只是必須追加到獨(dú)立容器中容器及布局管理器容器及布局管理器l容器使用示例:l說(shuō)明:以JFrame為例l居中問(wèn)題java.awt.Toolkit類(lèi)可用于得到屏幕的寬和高例如:Dimension dm=Toolkit.getDefaultToolkit().getScreenSize();int x=dm.width;int y=dm.height;x=(x-jf.getWidth()/2;y=(y-jf.getHeight()/2;jf.setLocation(x,y);l追加其他組件:例如:jf.getContentPane().add(new JButton(Welcom
5、);l退出:例如:jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);容器及布局管理容器及布局管理l布局管理器l說(shuō)明:l組件在容器中的位置和尺寸是由布局管理器決定的l所有容器都會(huì)引用一個(gè)布局管理器實(shí)例,通過(guò)它進(jìn)行組件的布局管理l默認(rèn)布局管理器:每個(gè)容器創(chuàng)建后都有默認(rèn)布局管理器Window、Frame、Dialog、JFrame:BorderLayoutPanel、Applet、JApplet:FlowLayoutl布局管理器設(shè)置:setLayout(new FlowLayout()更改布局管理器setLayout(null)取消布局管理器setL
6、ocationsetSizesetBounds容器及布局管理器容器及布局管理器l布局管理器:l種類(lèi):ljava.awt中包含5種FlowLayoutBorderLayoutGridLayoutCardLayoutGridBagLayoutljavax.swing中定義了若干種BoxLayout容器及布局管理器容器及布局管理器l布局管理器:lFlowLayout:流式布局管理器l按組件添加次序從左到右地放置在容器中。到達(dá)容器邊界,則換到下一行l(wèi)構(gòu)造函數(shù):FlowLayout()FlowLayout(int align)FlowLayout(int align,int hgap,int vgap)
7、l其他方法:setAlignmentlayoutContainer(Container)重新布局l示例:容器及布局管理器容器及布局管理器l布局管理器:lBorderLayout:邊界布局管理器l將容器分成東、南、西、北、中5個(gè)區(qū)l構(gòu)造函數(shù):BorderLayout()BorderLayout(int hgap,int vgap)l使用該布局管理,添加組件時(shí),可指定區(qū)域void add(Component comp,Object constraints)其中constraints取值:BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.EAST、
8、BorderLayout.WEST、BorderLayout.CENTER容器及布局管理器容器及布局管理器l布局管理器:lGridLayout:網(wǎng)格布局管理器l將容器分隔成若干行、列,組件被填充到每個(gè)網(wǎng)格中l(wèi)構(gòu)造函數(shù):GridLayout()GridLayout(int rows,int cols)GridLayout(int rows,int cols,int hgap,int vgap)l容器添加組件時(shí)可以指定網(wǎng)格序號(hào)l示例:如右圖所示的計(jì)算器容器及布局管理器容器及布局管理器l布局管理器:lCardLayout:卡片布局管理器l將容器看作一系列卡片,在任意時(shí)刻只有一張卡片可見(jiàn)l構(gòu)造函數(shù):C
9、ardLayout()CardLayout(int hgap,int vgap)l其他方法:向容器中追加組件時(shí),需要指定組件所在卡片的名稱(chēng)void add(Component comp,Object constraints)其中constraints為String,指定卡片名show(Container parent,String name)顯示具體哪張卡片容器及布局管理器容器及布局管理器l布局管理器:lGridBagLayout:網(wǎng)格包布局管理器l在GridLayout基礎(chǔ)上提供更為復(fù)雜的布局。允許各組件大小各不相同,允許單個(gè)組件所在顯示區(qū)占多個(gè)網(wǎng)格l使用步驟:創(chuàng)建GridBagLayout
10、布局管理器的一個(gè)實(shí)例GridBagLayout layout=new GridBagLayout();container.setLayout(layout);創(chuàng)建一個(gè)GridBagContraints實(shí)例GridBagContraints constraints=new GridBagContraints();為要添加的某個(gè)組件設(shè)置GridBagContraints的各種屬性:constraints.gridx=1;constraints.gridy=1;constraints.gridwidth=1;constraints.gridheight=1;通知布局管理器放置組件時(shí)的GridBagC
11、ontraints信息layout.setConstraints(comp,contraints);向容器中追加組件:container.add(comp);重復(fù)上述后三步動(dòng)作容器及布局管理器容器及布局管理器l布局管理器:lGridBagLayout:網(wǎng)格包布局管理器l關(guān)于GridBagContraints:包含了如何把一個(gè)組件添加到容器中的布局信息重要屬性:gridx和gridy:指定組件顯示區(qū)域左上角的列和行g(shù)ridWidth和gridHeight:指定組件顯示區(qū)域占據(jù)的列數(shù)和行數(shù)fill:組件顯示區(qū)域大于組件要求的大小,決定如何改變組件GridBagConstraints.NONE默認(rèn)G
12、ridBagConstraints.HORIZONAL水平方向填充GridBagConstraints.VERTICAL垂直方向填充GridBagConstraints.BOTH容器及布局管理器容器及布局管理器l布局管理器:lBoxLayout:通常與Box容器聯(lián)合使用lBox:具有以下靜態(tài)工廠方法:createHorizontalBox():生成Box對(duì)象,采用水平BoxLayout,組件沿水平方向放置createVerticalBox():默認(rèn)情況下,箱式布局中各組件之間沒(méi)有間距。如果需要添加間距,可以添加不可見(jiàn)的填充件。有三種填充件:Glue:膠水,調(diào)整容器大小時(shí),組件不變,膠水變化來(lái)維
13、持;Strut:支柱,具有固定像素,容器調(diào)整時(shí)保持不變Rigid Area:硬區(qū)域,可設(shè)置水平和垂直兩個(gè)方向的,容器調(diào)整時(shí)保持不變?nèi)萜骷安季止芾砥魅萜骷安季止芾砥鱨布局管理器:lBoxLayout:lBox:提供了組件間間隔的靜態(tài)方法:createHorizontalGlue()createVerticalGlue()createHorizontalStrut(int width)createVerticalStrut(int height)createRigidArea(Dimension d)示例:支柱膠水膠水輔助類(lèi)輔助類(lèi)l在面板上作圖(JPanel):l基本思路:l創(chuàng)建一個(gè)有JPanel
14、派生的類(lèi)l覆蓋其中的paintComponent方法l關(guān)于paintComponent方法:l方法頭:public void paintComponent(Graphics g)l說(shuō)明:Graphics對(duì)象由Java運(yùn)行系統(tǒng)自動(dòng)創(chuàng)建Graphics類(lèi)時(shí)可以在不同平臺(tái)上顯式圖形和圖像的一個(gè)抽象類(lèi)輔助類(lèi)輔助類(lèi)l在面板上作圖(JPanel):lJava中的坐標(biāo)系統(tǒng):l原點(diǎn)在容器左上角l所有度量單位都是像素l可以使用適當(dāng)?shù)淖煮w、顏色、圖形進(jìn)行繪制輔助類(lèi)輔助類(lèi)lColor類(lèi):l顏色由紅、綠、藍(lán)三色構(gòu)成l構(gòu)造Color對(duì)象:l基本語(yǔ)法:Color clr=new Color(r,g,b);lColor類(lèi)中
15、定義了13種標(biāo)準(zhǔn)顏色常量l黑、藍(lán)、青、深灰、灰、綠、淺灰、洋紅、橙、粉、紅、白、黃lComponent類(lèi)中統(tǒng)一定義了方法:lsetBackground(Color c)lsetForeground(Color c)輔助類(lèi)輔助類(lèi)lFont類(lèi)和FontMetrics類(lèi):lFont類(lèi)的對(duì)象的創(chuàng)建:lFont myfont=new Font(name,style,size);l說(shuō)明:字體名:ScanSerif、DialogInput、Serif等字型:Font.PLAIN、BOLD、ITALIC等,字型可以結(jié)合使用大?。赫土縧例如:Font myFont=new Font(“ScanSerif”,F
16、ont.BOLD+Font.ITALIC,16);輔助類(lèi)輔助類(lèi)lFont類(lèi)和FontMetrics類(lèi):lFontMetrics:用于計(jì)算字符串的精確長(zhǎng)度和寬度l屬性:Leading:文本行之間的距離Ascent:字符從基線到頂端的高度Descent:字符從基線到底端的距離Heigth:Leading+Ascent+Descent輔助類(lèi)輔助類(lèi)lFont類(lèi)和FontMetrics類(lèi):lFontMetrics:l抽象類(lèi),要獲得其對(duì)象,調(diào)用Graphics類(lèi)中的public FontMetrics getFontMetrics(Font f)lFontMetrics類(lèi)中包含下列實(shí)例方法得到字體信息:p
17、ublic int getAscent()public int getDescent()public int getLeading()public int getHeight()public int stringwidth(String str)示例示例l編寫(xiě)程序,以紅色、ScanSerif、粗體斜體、20磅的規(guī)格居中顯式相關(guān)信息。例如,示例運(yùn)行界面為如下。輔助類(lèi)輔助類(lèi)l繪制幾何圖形(Graphics類(lèi)提供):l繪制直線:drawLine(x1,y1,x2,y2);l繪制矩形:ldrawRect(x,y,w,h)lfillRect(x,y,w,h)ldrawRoundRect(x,y,w,h,
18、aw,ah)lfillRoundRect(x,y,w,h,aw,ah)ldraw3DRect(x,y,w,h,raised)lfill3DRect(x,y,w,h,rasied)l繪制橢圓:(外切矩形的方式)ldrawOval(x,y,w,h)lfillOval(x,y,w,h)示例示例l編寫(xiě)程序,完成下列圖形f(x)=x*x。(提示:使用DrawPolyline連接各個(gè)點(diǎn))輔助類(lèi)輔助類(lèi)l繪制幾何圖形(Graphics類(lèi)提供):l繪制圓?。海ㄒ彩歉鶕?jù)外切矩形繪制)ldrawArc(x,y,w,h,angle1,angle2)lfillArc(x,y,w,h,angle1,angle2)l示例:
19、輔助類(lèi)輔助類(lèi)l繪制幾何圖形:(Graphics類(lèi)提供)l繪制多邊形:l直接繪制:指定所有頂點(diǎn):drawPolygon(x,y,n)或fillPolygon(x,y,n)示例:int x=40,70,60,45,20;int y=20,40,80,45,60;g.drawPolygon(x,y,x.length);g.fillPolygon(x,y,x.length);輔助類(lèi)輔助類(lèi)l繪制幾何圖形:(Graphics類(lèi)提供)l繪制多邊形:l使用Polygon對(duì)象繪制:示例:Polygon poly=new Polygon();poly.addPoint(20,30);poly.addPoint(4
20、0,40);poly.addPoint(50,50);g.drawPolygon(poly);示例示例l編寫(xiě)程序,使用圓餅圖顯示作業(yè)、平時(shí)測(cè)驗(yàn)、期中考試和期末考試占總成績(jī)的百分比。如下圖所示,假設(shè)作業(yè)占20%,用紅色顯示;測(cè)驗(yàn)10%,用綠色顯示;期中占30,用藍(lán)色表示;期末占40,用橙色顯示。事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l已介紹的程序l是面向?qū)ο蟮?,但以過(guò)程的順序執(zhí)行l(wèi)可以用分支、循環(huán)控制執(zhí)行流程,但程序決定執(zhí)行次序l事件驅(qū)動(dòng):l激活一個(gè)事件就開(kāi)始執(zhí)行相應(yīng)代碼l事件和事件源:事件:程序發(fā)生了某些事情的信號(hào)(包括:外部用戶(hù)行為,如點(diǎn)擊鼠標(biāo)等;操作系統(tǒng)行為,如時(shí)鐘等)事件源:觸發(fā)事件的組件
21、稱(chēng)為事件源事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l一個(gè)事件是事件類(lèi)的實(shí)例,事件類(lèi)的根類(lèi)是java.util.EventObject,常用事件層次關(guān)系:EventObjectAWTEventActionEventListSelectionEventComponentEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventMouseEventKeyEvent事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l用戶(hù)行為、源對(duì)象和事件類(lèi)型事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l用戶(hù)行為
22、、源對(duì)象和事件類(lèi)型說(shuō)明:ListSelectionEvent包含在javax.swing.event中,其余都在java.awt.event中如果一個(gè)組件能發(fā)生某個(gè)事件,那么這個(gè)組件的任何子類(lèi)都可以發(fā)生同樣類(lèi)型的事件l事件注冊(cè)、監(jiān)聽(tīng)和處理事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l事件注冊(cè)、監(jiān)聽(tīng)和處理一個(gè)事件源可以觸發(fā)多種事件,如果它注冊(cè)了某種事件的監(jiān)聽(tīng)器,那么這種事件就會(huì)被接收和處理事件源本身并不處理事件,而是委托給相應(yīng)的事件監(jiān)聽(tīng)器來(lái)處理,因此這種模式稱(chēng)為委托模式委托模式事件、事件監(jiān)聽(tīng)器和監(jiān)聽(tīng)器方法:(參見(jiàn)后一頁(yè))事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l事件處理:(舉例:三個(gè)
23、按鈕進(jìn)行顏色切換)實(shí)現(xiàn)方式:用內(nèi)部類(lèi)實(shí)現(xiàn)監(jiān)聽(tīng)接口用容器類(lèi)實(shí)現(xiàn)監(jiān)聽(tīng)接口定義專(zhuān)門(mén)的頂層類(lèi)實(shí)現(xiàn)監(jiān)聽(tīng)接口采用事件適配器事件處理事件處理l事件驅(qū)動(dòng)程序設(shè)計(jì):l事件驅(qū)動(dòng):l關(guān)于適配器(續(xù))并不是所有的接口都有適配器(監(jiān)聽(tīng)器接口中只有一個(gè)方法時(shí),就不必提供Adapter)監(jiān)聽(tīng)器接口與適配器的對(duì)應(yīng)關(guān)系:一個(gè)組件注冊(cè)多個(gè)監(jiān)聽(tīng)器示例示例l編程實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器。(、)Swing用戶(hù)組件用戶(hù)組件lSwing組件主要包括:l文本處理、按鈕、標(biāo)簽、列表、pane、組合框、滾動(dòng)條、滾動(dòng)pane、菜單、表格、樹(shù)等l其中一些組件的圖示:Swing用戶(hù)組件用戶(hù)組件lSwing組件的圖示(續(xù)):Swing用戶(hù)界面組件用戶(hù)界面組件l
24、邊框:lJComponent類(lèi)中定義了setBorder(Border border)方法,用于為組件設(shè)置邊框l所有邊框類(lèi)都實(shí)現(xiàn)了javax.swing.border.Border接口l邊框類(lèi)的層次結(jié)構(gòu):Swing用戶(hù)界面組件用戶(hù)界面組件l邊框:l邊框類(lèi):lTitledBorder:實(shí)現(xiàn)帶標(biāo)題的子類(lèi)title、titleColor、titleFont、titleJustification、titlePositionlBevelBorder:創(chuàng)建可凹凸的3D邊框lEtchedBorder:創(chuàng)建一個(gè)蝕刻型邊框lLineBorder:創(chuàng)建一個(gè)線型邊框lMatteBorder:創(chuàng)建一個(gè)用圖標(biāo)構(gòu)成的虛線
25、型邊框lEmptyBorder:創(chuàng)建一個(gè)有邊框空間但沒(méi)有線的邊框Swing用戶(hù)界面組件用戶(hù)界面組件l按鈕組件:l所有的按鈕類(lèi)都繼承自AbstractButton類(lèi)Swing用戶(hù)界面組件用戶(hù)界面組件l按鈕組件:lJToggleButton與JButton的區(qū)別:l按鈕中可以顯示圖標(biāo),ImageIcon類(lèi)表示圖標(biāo)lsetIcon(Icon icon):設(shè)置按鈕有效狀態(tài)下的圖標(biāo)lsetRolloverIcon(Icon icon):設(shè)置鼠標(biāo)移動(dòng)到按鈕區(qū)域的圖標(biāo)lsetPressedIcon(Icon icon):設(shè)置按下按鈕時(shí)的圖標(biāo)lsetDisabledIcon(Icon icon):設(shè)置按鈕無(wú)效
26、狀態(tài)下的圖標(biāo)l文本組件:lJTextComponent 為所有 Swing 文本組件的根類(lèi)JTextField JEditorPaneJTextAreaJTextPaneJPasswordFieldSwing用戶(hù)界面組件用戶(hù)界面組件文本組件JTextField 組件允許輸入或編輯單行文本造函數(shù)包括:JTextField()JTextField(Document doc,String text,int columns)JTextField(int columns)JTextField(String text)JTextField(String text,int columns)Container
27、 con=getContentPane();con.setLayout(new FlowLayout();JLabel jl=new JLabel(“文本域文本域”);con.add(jl);JTextField tf=new JTextField(20);con.add(tf);Swing用戶(hù)界面組件用戶(hù)界面組件文本組件:JTextArea 組件:用于接受來(lái)自用戶(hù)的多行文本,可用于實(shí)現(xiàn)可滾動(dòng)界面造函數(shù)創(chuàng)建:JTextArea()JTextArea(int rows,int cols)JTextArea(String text)JTextArea(String text,int rows,in
28、t cols)JTextArea(Document doc)JTextArea(Document doc,String text,int rows,int cols)JLabel jl=new JLabel(“文本區(qū)文本區(qū)”);con.add(jl);JTextArea ta=new JTextArea(5,10);con.add(ta);Swing用戶(hù)界面組件用戶(hù)界面組件l文本組件:lJPasswordField:l是JTextField類(lèi)的子類(lèi)。l主要用來(lái)輸入口令Swing用戶(hù)界面組件用戶(hù)界面組件Swing用戶(hù)組件用戶(hù)組件l選擇性輸入:l為了簡(jiǎn)化表單填寫(xiě)過(guò)程,通常為用戶(hù)提供多種可供選擇的選
29、項(xiàng),而無(wú)需用戶(hù)寫(xiě)出他們的響應(yīng)。常用于選擇性輸入的組件有:l復(fù)選框復(fù)選框JCheckBoxl單選框單選框JRadioButtonl列表框列表框JListl組合框組合框JComboBoxSwing用戶(hù)組件用戶(hù)組件l復(fù)選框:l用于為用戶(hù)提供一組選項(xiàng)l具有下列構(gòu)造函數(shù):lJCheckBox()lJCheckBox(Icon icon)lJCheckBox(Icon icon,boolean selected)lJCheckBox(String text)lJCheckBox(String text,boolean selected)lJCheckBox(String text,Icon icon)lJ
30、CheckBox(String text,Icon icon,boolean selected)Swing用戶(hù)組件用戶(hù)組件l單選框:l允許用戶(hù)從多個(gè)選項(xiàng)中選擇其中一個(gè)lButtonGroup 用于在 Swing 中創(chuàng)建組l單選框的構(gòu)造函數(shù):lJRadioButton()lJRadioButton(Icon icon)lJRadioButton(Icon,boolean selected)lJRadioButton(String text)lJRadioButton(String text,boolean selected)lJRadioButton(String text,Icon icon)
31、lJRadioButton(String text,Icon icon,boolean selected)JCheckBox和和JRadioButton示例示例import java.awt.*;import javax.swing.*;class Hobby extends JPanel JCheckBox c1=new JCheckBox(閱讀,false);JCheckBox c2=new JCheckBox(音樂(lè),false);JCheckBox c3=new JCheckBox(繪畫(huà),false);JRadioButton rad1=new JRadioButton(大專(zhuān));JRad
32、ioButton rad2=new JRadioButton(本科);JRadioButton rad3=new JRadioButton(碩士);JLabel jl=new JLabel(您有什么愛(ài)好?);JLabel j2=new JLabel(您的最高學(xué)歷?);JButton exitbtn=new JButton(退出);public Hobby()setLayout(new GridLayout(9,1);add(jl);add(c1);add(c2);add(c3);add(j2);add(rad1);add(rad2);add(rad3);add(exitbtn);public
33、class Hobbytest extends JFrame Hobbytest()super();getContentPane().add(new Hobby();setSize(300,200);setVisible(true);public static void main(String args)new Hobbytest();示例示例l模擬交通燈,讓用戶(hù)從紅、黃、綠三色燈中選擇模擬交通燈,讓用戶(hù)從紅、黃、綠三色燈中選擇一種。選擇后,相應(yīng)的燈會(huì)亮,而且只能亮一盞。一種。選擇后,相應(yīng)的燈會(huì)亮,而且只能亮一盞。初始時(shí),所有的燈都不亮。初始時(shí),所有的燈都不亮。Swing用戶(hù)組件用戶(hù)組件l列表
34、框:l在可供選擇的選項(xiàng)很多時(shí),可向用戶(hù)呈現(xiàn)一個(gè)列表來(lái)供他們選擇lJList 組件依次排列項(xiàng)目列表,可進(jìn)行單選或多選lsetSelectionMode單/多選模式lListSelectionEvent事件/ListSelectionListener監(jiān)聽(tīng)器lJList組件既可顯示字符串,也可顯示圖標(biāo)lJList自身不支持鼠標(biāo)雙擊,而是利用事件處理機(jī)制解決鼠標(biāo)雙擊問(wèn)題的lMouseListenerSwing用戶(hù)組件用戶(hù)組件l列表框:l構(gòu)造函數(shù):lpublic JList():lpublic JList(ListModel dataModel):構(gòu)造一個(gè)列表,用它顯示指定模型中的元素 lpublic
35、JList(Object listData):構(gòu)造一個(gè)列表以顯示指定數(shù)組listData的元素lJList 不支持滾動(dòng)。要啟用滾動(dòng),可使用下列代碼:JScrollPane myScrollPane=new JScrollPane();myScrollPane.getViewport().setView(dataList);String stars=安安東東尼尼奧奧.班班德德拉拉斯斯,來(lái)來(lái)昂昂納納多多.迪迪卡卡普普尼奧尼奧,桑德拉桑德拉.布洛克布洛克,休休.格蘭特格蘭特,朱莉亞朱莉亞.羅伯茨羅伯茨;JList moviestars=new JList(stars);Swing用戶(hù)組件用戶(hù)組件l列
36、表框:l常用屬性:lselectedIndexlselectedIndices:int數(shù)組,表示選定的多項(xiàng)的序號(hào)lselectedValue:選定的第一個(gè)選定值lselectedValueslvisibleRowCount:列表不用滾動(dòng)可看到的行數(shù)Swing用戶(hù)組件用戶(hù)組件l組合框:l文本域和下拉列表的組合lJComboBox的構(gòu)造函數(shù):lpublic JComboBox():使用缺省數(shù)據(jù)模型創(chuàng)建對(duì)象使用缺省數(shù)據(jù)模型創(chuàng)建對(duì)象lpublic JComboBox(ComboBoxModel asModel):使用現(xiàn)有使用現(xiàn)有 ComboBoxModel 中的項(xiàng)目的組合框中的項(xiàng)目的組合框lpubli
37、c JComboBox(Object items):包含指定數(shù)包含指定數(shù)組元素的組合框組元素的組合框String names=弗弗雷雷德德里里克克.福福西西斯斯,約約翰翰.克克里里沙沙姆姆,瑪麗瑪麗.希金斯希金斯.克拉克克拉克,帕特麗夏帕特麗夏.康威爾康威爾;JComboBox authors=new JComboBox(names);Swing用戶(hù)組件用戶(hù)組件l組合框:l常用方法和屬性:l屬性:selectedIndex:int值,表示選定項(xiàng)的序號(hào)selectedItem:Object類(lèi)型,表示選定項(xiàng)l方法:public void addItem(Object item)public voi
38、d removeItem(Object obj)public Object getItemAt(int index)public void removeAllItems()示例示例l完成下列界面,并能:l輸入年齡后,焦點(diǎn)離開(kāi)時(shí)進(jìn)行合法性檢驗(yàn)l點(diǎn)擊確定按鈕時(shí),檢查是否每項(xiàng)都輸入完畢了Swing用戶(hù)組件用戶(hù)組件l頁(yè)標(biāo)簽面板(JTabbedPane):l可包含多個(gè)頁(yè)面,每個(gè)頁(yè)面與一個(gè)標(biāo)簽對(duì)應(yīng)l選擇特定標(biāo)簽就會(huì)顯式相應(yīng)頁(yè)面,并觸發(fā)事件ChangeEvent,由ChangeListener監(jiān)聽(tīng)器響應(yīng)l構(gòu)造函數(shù):lJTabbledPane()lJTabbledPane(int tabPlacement,i
39、nt tabLayoutPolicy)tabPlacement位置(TOP/BOTTOM)tabLayoutPolicy布局(WRAP_TAB_LAYOUT/SCROLL_TABLE_LAYOUT)Swing用戶(hù)組件用戶(hù)組件l滾動(dòng)條JScrollBar:l構(gòu)造函數(shù):lpublic JScrollBar()lpublic JScrollBar(int orientation)lpublic JScrollBar(int orientation,int value,int visible,int minimum,int maximum)l說(shuō)明:lorientation選值可以是:JScrollBa
40、r.HORIZONTAL和VERTICALlvalue:設(shè)定初始值lvisible:滑動(dòng)塊的大小lminimum和maximum:最小和最大值Swing用戶(hù)組件用戶(hù)組件l滾動(dòng)條JScrollBar:l重要屬性和方法:lblockIncrement:點(diǎn)擊滾動(dòng)條的塊增加或塊減少的量lunitIncrement:點(diǎn)擊單位增加或減少的量lpublic void setValue(int):用于設(shè)置滾動(dòng)條當(dāng)前值l事件:lAdjustmentEventlAdjustmentListeneradjustmentValueChanged方法Swing用戶(hù)組件用戶(hù)組件l滾動(dòng)條JScrollBar:l說(shuō)明:lJa
41、va提供了不需編碼的自動(dòng)滾動(dòng)的組件:JScrollPane可將它看作特殊容器構(gòu)造函數(shù):public JScrollPane()public JScrollPane(Component view)public JScrollPane(Component view,int vsbPolicy,int hsbPolicy)說(shuō)明:vsbPolicy、hsbPolicy取值(需要時(shí)出現(xiàn),總是沒(méi)有,總是有滾動(dòng)條)示例示例l編寫(xiě)程序,利用三個(gè)水平滾動(dòng)條分別調(diào)節(jié)紅、綠、藍(lán)比例,以此設(shè)定一個(gè)顏色,并將它作為前景色,在面板上畫(huà)出一個(gè)該顏色的填充橢圓。l增加一組單選按鈕,分別選擇不同圖形:實(shí)心矩形、實(shí)心橢圓、空心矩
42、形、空心橢圓,利用上述滾動(dòng)條調(diào)節(jié)得到的顏色,繪制不同的圖形Swing用戶(hù)組件用戶(hù)組件l菜單:l菜單的組織方式:l一個(gè)菜單條JMenuBar中包含多個(gè)菜單JMenul一個(gè)菜單JMenu中可以包含多個(gè)菜單項(xiàng)JMenuIteml而支持菜單的組件(如,JFrame、JDialog等)都包含方法setMenuBar(JMenuBar bar)來(lái)設(shè)置菜單條lJMenuItem有兩個(gè)子類(lèi):lJRadioButtonMenuItemlJCheckBoxMenuIteml用戶(hù)選擇菜單會(huì)觸發(fā)一個(gè)ActionEvent事件,可由監(jiān)聽(tīng)器ActionListener負(fù)責(zé)處理Swing用戶(hù)組件用戶(hù)組件l菜單:l在Java
43、中實(shí)現(xiàn)菜單的步驟:l創(chuàng)建一個(gè)菜單欄,并建立它與框架的關(guān)聯(lián):JFrame fm=new JFrame();fm.setSize(200,300);fm.setVisible(true);JMenuBar jmb=new JMenuBar();fm.setMenuBar(jmb);l創(chuàng)建菜單:JMenu fileMenu=new JMenu(“File”);JMenu helpMenu=new JMenu(“Help”);/JMenu(String lable)jmb.add(fileMenu);jmb.add(helpMenu);Swing用戶(hù)組件用戶(hù)組件l菜單:l在Java中實(shí)現(xiàn)菜單的步驟:(
44、續(xù))l創(chuàng)建菜單項(xiàng),并將它們加入到菜單中fileMenu.add(new JMenuItem(“New”);fileMenu.add(new JMenuItem(“Open”);fileMenu.addSeparator();/在菜單中增加一條分隔線fileMenu.add(new JMenuItem(“Print”);fileMenu.add(new JMenuItem(“Exit”);創(chuàng)建子菜單項(xiàng):將一個(gè)菜單嵌入到另一個(gè)菜單中JMenu softWareSubMenu=new JMenu(“Software”);JMenu hardWareSubMen=new JMenu(“Hardward
45、”);helpMenu.add(softWareSubMenu);helpMenu.add(hardWareSubMenu);Swing用戶(hù)組件用戶(hù)組件l菜單:l在Java中實(shí)現(xiàn)菜單的步驟:(續(xù))l創(chuàng)建菜單項(xiàng),并將它們加入到菜單中創(chuàng)建復(fù)選框菜單項(xiàng):helpMenu.add(new JCheckBoxMenuItem(“Check it”);創(chuàng)建單選按鈕菜單項(xiàng):(與JCheckBoxMenuItem類(lèi)似)l對(duì)于菜單項(xiàng)產(chǎn)生的ActionEvent事件,必須實(shí)現(xiàn)處理器public void actionPerformed(ActionEvent e)String actionCommand=e.ge
46、tActionCommand();if(e.getSource()instanceof JMenuItem)if(“New”.equals(actionCommand)/Swing用戶(hù)組件用戶(hù)組件l菜單:l在Java中實(shí)現(xiàn)菜單的步驟:(續(xù))l設(shè)置菜單的圖標(biāo)、熱鍵和快捷鍵:JMenuItem及其子類(lèi)包含下列方法:setIcon(ImageIcon);/設(shè)置圖標(biāo)setMnemonic(char);/設(shè)置ALT+Char熱鍵setAccelerator(KeyStroke);/設(shè)置快捷鍵例如:JMenuItem jopen=new JMenuItem(“Open”);jopen.setIcon(ne
47、w ImageIcon(“images/new.gif”);jopen.setMnemonic(O);jopen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK);/Ctrl+OSwing用戶(hù)組件用戶(hù)組件l菜單:lSwing還包含JPopupMenu:l用戶(hù)按下或松開(kāi)鼠標(biāo)右鍵,觸發(fā)MouseEvent事件l此時(shí)該事件對(duì)象的isPopupTrigger()方法返回truel如果希望顯式彈出式菜單,只需調(diào)用JPopupMenu中的show()方法即可Swing用戶(hù)組件用戶(hù)組件l組件觀感l(wèi)Swing組
48、件提供了可插把式觀感l(wèi)默認(rèn)情況下,Swing程序使用Metal觀感l(wèi)改變的方法有:lJdk/jre/lib目錄下提供一個(gè)swing.properties文件,其中把屬性swing.defaultlaf設(shè)成你想要的觀感名可提供的觀感包括:javax.swing.plaf.metal.MetalLookAndFeelcom.sun.java.swing.plaf.motif.MotifLookAndFeelcom.sun.java.swing.plaf.windows.WindowsLookAndFeelSwing用戶(hù)組件用戶(hù)組件l組件觀感l(wèi)改變的方法有(續(xù)):l動(dòng)態(tài)改變觀感,可調(diào)用靜態(tài)的UIMa
49、nager.setLookAndFeel方法,并給出想要的觀感的名字;接著調(diào)用SwingUtilities.updateComponentTreeUI來(lái)刷新全部組件Swing用戶(hù)組件用戶(hù)組件l對(duì)話框JDialogl默認(rèn)布局管理器:BorderLayoutl構(gòu)造方法:lJDialog(Frame owner,String title,boolean modal)l說(shuō)明:modal是否為模態(tài)對(duì)話框l對(duì)話框關(guān)閉時(shí),通常不需要結(jié)束整個(gè)應(yīng)用程序,因此需要調(diào)用JDialog的disponse()方法,釋放對(duì)話框所占用資源Swing用戶(hù)組件用戶(hù)組件l文件對(duì)話框JFileChooserl包含兩個(gè)靜態(tài)方法:lshowOpenDialog():顯式用于打開(kāi)文件的對(duì)話框lshowSaveDialog():顯式用于保存文件的對(duì)話框l使用示例:文本編輯器模仿Swing用戶(hù)組件用戶(hù)組件l消息框:lJOptionPane類(lèi)中包含一系列showXXXDialog()的靜態(tài)方法,可用來(lái)生成各種類(lèi)型的消息框lshowMessageDialog():顯示包含提示信息的對(duì)話框lshowOptionDialog():顯示讓用戶(hù)選擇可選項(xiàng)的對(duì)話框lshowInputDialog()lshowConfirmDialog():顯示讓用戶(hù)選Yes/No的對(duì)話框
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案