15-java-GUI1(組件、容器、布局管理器)_第1頁(yè)
15-java-GUI1(組件、容器、布局管理器)_第2頁(yè)
15-java-GUI1(組件、容器、布局管理器)_第3頁(yè)
15-java-GUI1(組件、容器、布局管理器)_第4頁(yè)
15-java-GUI1(組件、容器、布局管理器)_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

圖形(GUI)編程—AWT、布局管理器了解AWT包及其組件掌握如何創(chuàng)建GUI程序掌握AWT組件的基本用法掌握如何使用布局管理器構(gòu)造復(fù)雜的布局本章目標(biāo)圖形編程是用圖形的方式,借助菜單,按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地向計(jì)算機(jī)系統(tǒng)發(fā)出指令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形方式顯示給用戶的技術(shù)。Java提供了AWT和Swing開發(fā)包進(jìn)行GUI編程AWT包(以java.awt開頭的)Swing包(以javax.swing開頭的)圖形編程概述AWT---AbstractWindowToolkit是Java專門用來(lái)設(shè)計(jì)“GUI”和“繪制2D”的包在開發(fā)Applet和圖形應(yīng)用程序時(shí),一般需要用到AWT,AWT給用戶提供基本的UI及事件處理結(jié)構(gòu),支持剪貼板、數(shù)據(jù)傳輸和圖像操作。根據(jù)功能分類:圖形(現(xiàn)在一般不用,因?yàn)樵诓煌脚_(tái)顯示處觀和感覺不一樣,需要在不同平臺(tái)進(jìn)行測(cè)試,現(xiàn)在主要使用JFC---Java的基礎(chǔ)類)事件處理圖形和圖像工具布局管理器AWT包java.awt包中的類體系結(jié)構(gòu)ComponentButtonCheckboxContainerChoiceCanvasTextComponentLabelPanelWindowAppletFrameDialogTextAreaTextFieldJava1.2引入稱為Swing的新的GUI組件庫(kù)。

Swing包括javax.swing包及其子包。Swing有一個(gè)與平臺(tái)無(wú)關(guān)的實(shí)現(xiàn),而且具有一個(gè)藝術(shù)狀態(tài)的屬性集。盡管Swing獨(dú)立于AWT,但它是依照基本的AWT類實(shí)現(xiàn)的。Swing很好的界定了容器、組件以及用戶元素之間的關(guān)系。Swing介紹Swing體系結(jié)構(gòu)ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuSwing組件獨(dú)立于本地窗口系統(tǒng)。Swing組件除了AbstractButton類之外都以J開頭。Swing組件是基于AWT構(gòu)建。包含AWT可視化組件的替代組件,也包含復(fù)雜組件-樹和表Swing組件J設(shè)計(jì)GUI時(shí),都有用于放置可視化組件的主窗口。Container對(duì)象可用于將組件組合在一起。容器中的組件根據(jù)特定布局排列。Swing中的容器有兩類:-頂級(jí)容器-中間容器Swing應(yīng)用程序的容器層次JFrame:用于框架窗口的類,此窗口帶有邊框、標(biāo)題、用于關(guān)閉和最小化窗口的圖標(biāo)等。帶GUI的應(yīng)用程序通常至少使用一個(gè)框架窗口。JDialog:用于對(duì)話框的類。JApplet:用于使用Swing組件的JavaApplet的類。頂級(jí)容器JPanel:最靈活、最常用的中間容器。JScrollPane:與JPanel類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動(dòng)條。JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。中間容器SwingGUI框架你好,世界菜單欄頂級(jí)容器GUI組件GUI組件內(nèi)容窗格importjavax.swing.*;publicclassHelloSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloSwing");JLabellabel=newJLabel("你好,Swing");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true);}}基本的Swing應(yīng)用程序?qū)氡匾陌?,一般還需導(dǎo)入:

importjava.awt.*;importjava.awt.event.*;

設(shè)置一個(gè)頂級(jí)容器創(chuàng)建一個(gè)Swing組件將組件添加到容器內(nèi)容窗格實(shí)現(xiàn)了在單擊“關(guān)閉”按鈕時(shí),可以關(guān)閉窗口。如果使用的早期版本的平臺(tái),則需要通過事件監(jiān)聽器實(shí)現(xiàn)

JFrame是放置其他

Swing組件的頂級(jí)容器JFrame組件用于在Swing程序中創(chuàng)建窗體它的構(gòu)造函數(shù):JFrame()JFrame(StringTitle)組件必須添加至內(nèi)容窗格,而不是直接添加至JFrame對(duì)象,示例:frame.getContentPane().add(b);JPanel組件是一個(gè)中間容器用于將小型的輕量級(jí)組件組合在一起JPanel的缺省布局為FlowLayoutJPanel具有下列構(gòu)造函數(shù):JPanel()JPanel(LayoutManagerlm)JPanelSwing的按鈕相對(duì)于AWT中Button類提供了更多的功能。JButton類允許用圖標(biāo)、字符串或兩者同時(shí)構(gòu)造一個(gè)按鈕。構(gòu)造函數(shù)如下:JButton()JButton(Iconicon):icon表示使用的圖標(biāo)JButton(Stringtext):text表示使用的字符串JButton(Stringtext,Iconicon)

JButton…ImageIconbuttonIcon1=newImageIcon("on.gif");

JButtonb1=newJButton("FirstButton",buttonIcon1);b1.setMnemonic(KeyEvent.VK_F);

…設(shè)置鍵盤快捷方式創(chuàng)建一個(gè)帶圖標(biāo)的JButtonimportjava.awt.*;importjavax.swing.*;classPanelDemoextendsJFrame{publicPanelDemo(Stringtitle){super(title); Containerc=getContentPane();JPanelcpane=newJPanel();JButtonok=newJButton("確定");cpane.add(ok); JButtoncancel=newJButton("取消");cpane.add(cancel);c.add(cpane,BorderLayout.SOUTH);}JPanel和JButton使用示例publicstaticvoidmain(Stringargs[]){PanelDemopd=newPanelDemo("JPanel測(cè)試");pd.setSize(300,200);pd.setVisible(true);}}

它既可以顯示文本也可以顯示圖像構(gòu)造函數(shù)如下:JLabel(Iconicon):icon表示使用的圖標(biāo)JLabel(Stringtext,Iconicon,intalign):text表示使用的字符串;icon表示使用的圖標(biāo);align表示水平對(duì)齊方式,其值可以為:LEFT、RIGHT、CENTER。JLabel…ImageIconicon=newImageIcon("Calv.gif");JLabelcalv_label=newJLabel("這是

Calvin",icon,

SwingConstants.LEFT);

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

…JTextArea組件用于接受來(lái)自用戶的多行文本它可實(shí)現(xiàn)可滾動(dòng)界面JTextArea組件可使用下列構(gòu)造函數(shù)創(chuàng)建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols)JTextArea(Documentdoc)JTextArea(Documentdoc,Stringtext,introws,intcols)JTextArea…JLabeljl=newJLabel(“文本區(qū)”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);

…為了簡(jiǎn)化表單填寫過程,通常為用戶提供多種可供選擇的選項(xiàng),而無(wú)需用戶寫出他們的響應(yīng)。常用于選擇性輸入的組件有:復(fù)選框單選按鈕列表框組合框選擇性輸入復(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)復(fù)選框單選按鈕允許用戶從多個(gè)選項(xiàng)中選擇其中一個(gè)ButtonGroup用于在Swing中創(chuàng)建組JRadioButton對(duì)象可使用下列構(gòu)造函數(shù)創(chuàng)建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)單選按鈕importjava.awt.*;importjavax.swing.*;classHobbyextendsJPanel{JCheckBoxc1=newJCheckBox("閱讀",false);JCheckBoxc2=newJCheckBox("音樂",false);JCheckBoxc3=newJCheckBox("繪畫",false);JRadioButtonrad1=newJRadioButton("大專");JRadioButtonrad2=newJRadioButton("本科");JRadioButtonrad3=newJRadioButton("碩士");JLabeljl=newJLabel("您有什么愛好?");JLabelj2=newJLabel("您的最高學(xué)歷?");JButtonexitbtn=newJButton("退出");publicHobby(){setLayout(newGridLayout(9,1));add(jl);add(c1);add(c2);add(c3);add(j2);add(rad1);add(rad2);add(rad3);add(exitbtn);}}JCheckBox和JRadioButton使用示例publicclassHobbytestextendsJFrame{Hobbytest(){super();getContentPane().add(newHobby());setSize(300,200);setVisible(true);}publicstaticvoidmain(Stringargs[]){newHobbytest();}}在可供選擇的選項(xiàng)很多時(shí),可向用戶呈現(xiàn)一個(gè)列表來(lái)供他們選擇JList組件依次排列項(xiàng)目列表,這些項(xiàng)目可以單選或多選JList類既可顯示字符串,也可顯示圖標(biāo)JList不支持雙擊MouseListener可用于解決雙擊問題列表publicJList():使用空模型構(gòu)造JListpublicJList(ListModeldataModel):構(gòu)造一個(gè)列表,用它顯示指定模型中的元素。publicJList(Object[]listData):構(gòu)造一個(gè)列表以顯示指定數(shù)組listData的元素。JList不支持滾動(dòng)。要啟用滾動(dòng),可使用下列代碼:JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.getViewport().setView(dataList);JList構(gòu)造函數(shù)…Stringstars[]={"安東尼奧.班德拉斯","來(lái)昂納多.迪卡普尼奧","桑德拉.布洛克","休.格蘭特","朱莉亞.羅伯茨"};JListmoviestars=newJList(stars);…文本域和下拉列表的組合在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);…Graphics對(duì)象記錄針對(duì)繪制圖形和文本的一系列設(shè)置,比如設(shè)置的圖標(biāo)或當(dāng)前顏色、字體等。Java中,所有繪制都必須通過一個(gè)圖形對(duì)象??梢杂肎raphics對(duì)象繪制的圖形是原始圖形。對(duì)于這些圖形,不能使用實(shí)數(shù)坐標(biāo)不能繪制虛線或?qū)挾炔欢ǖ木€條不能使用紋理或漸變顏色填充形體為了解決圖形對(duì)象的局限性,在Java1.1以后的版本中引入了Java2DGraphicsJava2D包括一個(gè)Graphics2D類,此類擴(kuò)展了Graphics類,所有圖形方法都可以配合Graphics2D對(duì)象使用Java2D圖形的重要功能:

顏色和圖案:圖形可以用漸變顏色和填充圖案著色。透明繪制:圖形的不透明度通過α透明值控制。本地字體:平臺(tái)上的所有本地字體都可用于繪制文本。畫筆的顯式控制:可以使用線條的粗細(xì)、虛線圖案以及段連接樣式。坐標(biāo)系的轉(zhuǎn)換:可以使用平移、縮放、旋轉(zhuǎn)和剪切Graphics2DFont類只有一個(gè)構(gòu)造函數(shù):publicFont(Stringname,intstyle,intpointsize)參數(shù)name表示字體的名稱。參數(shù)style表示樣式可以是Font.PLAIN、Font.BOLD或Font.ITALIC參數(shù)pointsize表示字體的點(diǎn)數(shù),即以磅為單位的字體大小,可以是11、12、14、16等。Font類publicvoidpaint(Graphicsg){...

g.setFont(newFont("Helvetica",Font.ITALIC,18));g.drawString("Drawwhereeveryouwant",100,10);...}通過使用getFontMetrics()方法,而不是new運(yùn)算符(因?yàn)樗且粋€(gè)抽象類),可以創(chuàng)建該類的對(duì)象。這個(gè)對(duì)象包含與字體相關(guān)的大量信息,包括字符的高度、按像素?cái)?shù)計(jì)算的字符串寬度等。常用方法如下:intstringWidth(Strings):返回字符串寬度intcharWidth(charc):返回字符c的寬度intgetHeight():返回字體的高度FontMetrics類有時(shí),需要測(cè)量用特殊字體顯示的一個(gè)字符串,可以使用FontMetrics類使用字體示例1importjava.awt.*;importjavax.swing.*;classFontsPanelextendsJPanel{

publicvoidpaintComponent(Graphicsg){Stringquote="Happinessisanattitude.";

Fontf=newFont("Georgia",Font.ITALIC,16);g.setFont(f);g.drawString(quote,20,20);}}該包中包含JPanel和JFrame組件publicclassFontsDemoextendsJFrame{publicFontsDemo(){setTitle("test");setSize(300,200);ContainercontentPane=getContentPane();contentPane.add(newFontsPanel());}publicstaticvoidmain(Stringargs[]){FontsDemoframe=newFontsDemo();frame.show();}}列出當(dāng)前平臺(tái)上所有可用字體importjava.awt.*;publicclassListFonts{publicstaticvoidmain(String[]args){

GraphicsEnvironmentenv=GraphicsEnvironment.getLocalGraphicsEnvironment();

String[]fontNames=env.getAvailableFontFamilyNames();

System.out.println("可用字體:");

for(inti=0;i<fontNames.length;i++)System.out.println(""+fontNames[i]);}}

java.awt.Color類提供了13個(gè)可用作標(biāo)準(zhǔn)顏色的常量:

black(黑色) green(綠色)

red(紅色)blue(藍(lán)色)

lightGray(淺灰色)white(白色)

cyan(藍(lán)綠色)magenta(洋紅色)

yellow(黃色)darkGray(深灰色)

orange(橙色)gray(灰色)

pink(粉紅色)顏色Colora=newColor(0.907F,2F,0F);Colorb=newColor(255,255,0);

Color類的構(gòu)造函數(shù)Color類的構(gòu)造函數(shù)如下:

-Color(intred,intgreen,intblue):使用三個(gè)分別代表紅、綠、藍(lán)的整數(shù)來(lái)表示它們混合的顏色。這些值必須在0到255之間。

-Color(floatred,floatgreen,floatblue):用三個(gè)浮點(diǎn)數(shù)指定紅、綠、藍(lán)的相對(duì)混合。如果要修改或設(shè)置組件的顏色,可以使用下列幾種方法:voidsetColor(ColornewColor):設(shè)置當(dāng)前繪制的顏色voidsetForeground(Color):設(shè)置前景色voidsetBackground(Color):設(shè)置背景色

設(shè)置顏色方法使用顏色示例importjava.awt.*;importjavax.swing.*;classColorsPanelextendsJPanel{publicvoidpaintComponent(Graphicsg){Fontf=newFont("Georgia",Font.ITALIC,16);g.setFont(f);

g.setColor(Color.red);g.drawString("Hello",75,100);

g.setColor(newColor(0,128,128));g.drawString("World",75,125);}}用戶界面上的組件可以按不同方式排列。Java使用布局管理器來(lái)管理這些排列方式。每當(dāng)需要重新調(diào)整屏幕大小或重新繪制屏幕上任一項(xiàng)目時(shí),就要用到布局管理器。AWT提供一組用來(lái)進(jìn)行布局管理的類,稱為布局管理器或布局。所有布局都實(shí)現(xiàn)LayoutManager接口。布局管理器Java中的布局類型包括以下幾種:FlowLayout(流式布局)BorderLayout(方位布局)GridLayout(網(wǎng)格布局)GridBagLayout(網(wǎng)袋布局)CardLayout(卡片布局)布局類型每個(gè)布局管理器都有自己特定的用途。要按行和列顯示幾個(gè)同樣大小的組件,GridLayout會(huì)比較合要在盡可能大的空間里顯示一個(gè)組件,就要選擇BorderLayout或GridBagLayout布局類型的選用每個(gè)容器(Container對(duì)象)都有一個(gè)與它相關(guān)的缺省的布局管理器。-Applet的缺省布局是FlowLayout在沒有設(shè)置新的布局前,在容器中添加組件都按照該容器的缺省布局排列??梢酝ㄟ^setLayout()方法為容器設(shè)置新的布局。

如何設(shè)置布局FlowLayoutApplet和面板的缺省布局組件從左上角開始按從左到右、從上到下的方式排列FlowLayout的構(gòu)造函數(shù)有:FlowLayout():生成一個(gè)默認(rèn)的流式布局FlowLayout(intalignment):可以設(shè)定每一行組件的對(duì)齊方式FlowLayout(intalignment,inthorz,intvert):可以設(shè)定組件間的水平和垂直距離FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//為容器設(shè)置新布局

下面是BorderLayout所定義的構(gòu)造函數(shù):-BorderLayout():生成默認(rèn)的邊界布局-BorderLayout(inthorz,intvert):可以設(shè)定組件間的水平和垂直距離BorderLayout2-1窗口、框架和對(duì)話框等的缺省布局組件可被置于容器的北、南、東、西或中間位置BorderLayout類定義了幾個(gè)常量值以指定相應(yīng)區(qū)域:BorderLayout.NORTH–對(duì)應(yīng)容器的頂部BorderLayout.EAST–對(duì)應(yīng)容器的右部BorderLayout.SOUTH–對(duì)應(yīng)容器的底部BorderLayout.WEST–對(duì)應(yīng)容器的左部BorderLayout.CENTER–對(duì)應(yīng)容器的中部加入組件方法:

voidadd(ComponentObj,intregion);

BorderLayout2-2...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);...GridLayout用于將容器區(qū)域劃分為一個(gè)矩形網(wǎng)格組件按行和列排列GridLayout的構(gòu)造函數(shù)如下所示:

-

GridLayout():生成一個(gè)單列的網(wǎng)格布局

-GridLayout(introw,intcol):生成一個(gè)設(shè)定行數(shù)和列數(shù)的網(wǎng)格布局

-GridLayout(introw,intcol,inthorz,intvert):可以設(shè)置組件之間的水平和垂直間隔

...

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(b

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論