第十七講JavaGUI編程之四_第1頁
第十七講JavaGUI編程之四_第2頁
第十七講JavaGUI編程之四_第3頁
第十七講JavaGUI編程之四_第4頁
第十七講JavaGUI編程之四_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第十七講JavaGUI編程之四基本要求1.掌握Java中組件布局管理2.了解Java中高級組件2一、布局管理器(為什么需要??)importjava.awt.Container;importjavax.swing.JButton;importjavax.swing.JFrame;publicclassdemo{JFrameapp; publicdemo() { app=newJFrame("工具條例程"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(320,120); Containerd=app.getContentPane(); app.setSize(550,200); for(inti=0;i<10;i++) { JButtonbutton=newJButton("按鈕"+i); app.add(button); }

app.setVisible(true); } publicstaticvoidmain(String[]agrs)throwsException{ newdemo(); }}//看看是什么效果??????3(2)什么是布局管理器在JavaGUI中,Java將容器內(nèi)的所有組件安排給一個“布局管理器”負責管理,如:排列順序,組件的大小、位置,當窗口移動或調(diào)整大小后,組件如何變化等功能授權(quán)給對應的容器布局管理器來管理,不同的布局管理器使用不同算法和策略,容器可以通過選擇不同的布局管理器來決定布局。Java中用來管理布局的一組APIJavaGUI常用布局管理器有:BorderLayout、GridLayout、FlowLayout、CardLayout和空布局通過setLayout方法進行設定4(a)BorderLayout邊框布局BorderLayout是Window,F(xiàn)rame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5個區(qū)域:North,South,East,West和Center,每個區(qū)域只能放置一個組件。如果不指定擺放位置時,則默認擺放在中間的位置。每個區(qū)域只能加入一個組件,如加入多個,則先前加入的組件會被遺棄思考:該種布局最多能放幾個組件??NorthSouthWestEestCenter5例子importjava.awt.Container;importjavax.swing.JButton;importjavax.swing.JFrame;publicclassdemo{JFrameapp; publicdemo() { app=newJFrame("工具條例程"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(320,200); Containerd=app.getContentPane();

JButtonbn=newJButton("BN"); JButtonbs=newJButton("BS"); JButtonbw=newJButton("BW"); JButtonbe=newJButton("BE"); JButtonbc=newJButton("BC");d.add(bn,"North");//d.add(BorderLayout.NORTH,bn); d.add(bs,"South"); d.add(bw,"West"); d.add(be,"East"); d.add(bc,"Center");

app.setVisible(true); } publicstaticvoidmain(String[]agrs)throwsException{ newdemo(); }}6(b)FlowLayout---順序布局(流式布局)其組件的放置規(guī)律是從上到下、從左到右進行放置,如果容器足夠?qū)?取決于容器的寬度),第一個組件先添加到容器中第一行的最左邊,后續(xù)的組件依次添加到上一個組件的右邊,如果當前行已放置不下該組件,則放置到下一行的最左邊。FlowLayout是Panel,Applet的缺省布局管理器,常用的一種。構(gòu)造方法概述FlowLayout()構(gòu)造一個新的FlowLayout,它是居中對齊的,默認的水平和垂直間隙是5個單位FlowLayout(intalign)構(gòu)造一個新的FlowLayout,它具有指定的對齊方式,默認的水平和垂直間隙是5個單位FlowLayout(intalign,inthgap,intvgap)創(chuàng)建一個新的流布局管理器,它具有指定的對齊方式以及指定的水平和垂直間隙7例子importjava.awt.Container;importjava.awt.FlowLayout;importjavax.swing.JButton;importjavax.swing.JFrame;publicclassdemo{JFrameapp; publicdemo() { app=newJFrame("工具條例程"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(320,200); Containerd=app.getContentPane(); FlowLayoutflow=newFlowLayout();//注釋后效果如何?? //flow.setHgap(30); //flow.setVgap(10);//flow.setAlignment(FlowLayout.RIGHT); JPanelpanel=newJPanel(flow); for(inti=0;i<10;i++) { JButtonbutton=newJButton("按鈕"+i); panel.add(button); } app.add(panel); app.setVisible(true); } publicstaticvoidmain(String[]agrs){ newdemo(); }}//看看效果,把窗口放大后怎么樣?檢驗默認間隙??8(c)GridLayout(網(wǎng)格布局)GridLayout布局使容器中各個組件呈網(wǎng)格狀布局,平均占據(jù)容器的空間。此時容器被分成大小相等的矩形,一個網(wǎng)格中放置一個組件。構(gòu)造方法概述GridLayout()創(chuàng)建具有默認值的網(wǎng)格布局,即每個組件占據(jù)一行一列GridLayout(introws,intcols)創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局GridLayout(introws,intcols,inthgap,intvgap)創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局9例子importjava.awt.Container;importjava.awt.GridLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassdemo{JFrameapp; publicdemo() { app=newJFrame("工具條例程"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(320,200); Containerd=app.getContentPane();

GridLayoutgrid=newGridLayout(2,5);//試試采用缺省參數(shù)如何?? JPanelpanel=newJPanel(grid); for(inti=0;i<10;i++) { JButtonbutton=newJButton("按鈕"+i); panel.add(button); } app.add(panel);

app.setVisible(true); } publicstaticvoidmain(String[]agrs)throwsException{ newdemo(); }}10(d)null布局通過調(diào)用容器類的setLayout(null)方法,可以把一個容器的布局設置為null布局(空布局)。使用空布局時,需要對放入容器中的組件設置位置參數(shù)。一般使用setBounds(intx,inty,intw,inth)方法對組件進行絕對定位。一般很少用,可以參考P231例子11考慮下面例子publicclassdemo{publicstaticvoidmain(Stringargs[]){ Framef=newFrame("NestedContainer"); JButtonb0=newJButton("displayArea");Panelp=newPanel();p.setLayout(newGridLayout(2,2));JButtonb1=newJButton("1");JButtonb2=newJButton("2");JButtonb3=newJButton("3");JButtonb4=newJButton("4");p.add(b1); p.add(b2);p.add(b3); p.add(b4); f.add(b0,"North"); f.add(p,"Center");f.pack();

f.setVisible(true);}}12總結(jié):實際應用中常常是會用到好幾種布局結(jié)合使用往往通過對JPanel嵌套處理,描述高級布局效果考慮如何處理該效果??13二、JavaGUI中高級組件高級組件是由多個基本組件組合而成的組件,通過高級組件來組織這些基本組件,從而完成基本組件所不能完成的功能。但使用起來較普通組件稍為復雜一些。課本中介紹表格組件、樹組件和其他幾個高級組件。有關(guān)高級組件更深入的知識,請參考Java幫助文檔。14高級組件--------表格組件JTable

JTable

表格是Swing新增加的組件,主要功能是把數(shù)據(jù)以二維表格的形式顯示出來,并且允許對表格中的數(shù)據(jù)進行編輯。表格的模型功能強大、靈活并易于執(zhí)行。表格組件是最復雜的組件。常用方法查看P233,如獲取行、列數(shù),某行某列數(shù)據(jù)等等。常結(jié)合JScrollPane進行滾動條、及標題窗口構(gòu)造方法概述JTable()創(chuàng)建具有默認的表格JTable(introws,intcols)創(chuàng)建具有指定行數(shù)和列數(shù)的表格JTable(Object[][]data,Object[]columnname)創(chuàng)建具有指定數(shù)據(jù)的表格15例子importjava.awt.Container;importjavax.swing.JFrame;importjavax.swing.JTable;importjavax.swing.JScrollPane;public

classdemo{JFrameapp;publicdemo(){

app=newJFrame("表格例程");

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

app.setSize(320,200);Containerd=app.getContentPane();

JTabletable=newJTable(5,6);

table.setValueAt(1234,1,1);//設置單元格的值

System.out.println(table.getValueAt(0,0));//值是以對象的形式存在

d.add(newJScrollPane(table));

app.setVisible(true);}public

static

voidmain(String[]agrs)throwsException{newdemo();}}16另一例子importjava.awt.Container;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTable;public

classdemo{JFrameapp;publicdemo(){

app=newJFrame("表格例程");

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

app.setSize(500,200);Containerd=app.getContentPane();

String[]name={"學號","Java","數(shù)據(jù)庫"};String[][]value=newString[5][3];

for(inti=0;i<value.length;i++){

for(intj=0;j<value[i].length;j++)value[i][j]=i+j+"";}

JTabletable=newJTable(value,name);

d.add(newJScrollPane(table));

app.setVisible(true);}public

static

voidmain(String[]agrs)throwsException{newdemo();}}17(2)樹組件JTree顯示一個層次關(guān)系分明的一組數(shù)據(jù),用樹狀圖表示能給用戶一個直觀而易用的感覺,JTree類如同Windows的資源管理器的左半部JTree的主要功能是把數(shù)據(jù)按照樹狀進行顯示,其數(shù)據(jù)來源于其它對象JTree樹中最基本的對象叫做節(jié)點(TreeNode),它表示在給定層次結(jié)構(gòu)中的數(shù)據(jù)項。樹以垂直方式顯示數(shù)據(jù),每行顯示一個節(jié)點。樹中只有一個根節(jié)點,所有其他節(jié)點從這里引出。除根節(jié)點外,其他節(jié)點分為兩類:一類是代子節(jié)點的分支節(jié)點;另一類是不帶子節(jié)點的葉節(jié)點。18JTree的構(gòu)造方法構(gòu)造方法概述JTree()返回帶有示例模型的JTreeJTree(Object[]value)返回JTree,指定數(shù)組的每個元素作為不被顯示的新根節(jié)點的子節(jié)點JTree(TreeNoderoot)返回JTree,指定的TreeNode作為其根,它顯示根節(jié)點JTree(TreeNoderoot,booleanasksAllowsChildren)返回JTree,指定的TreeNode作為其根,它用指定的方式顯示根節(jié)點,并確定節(jié)點是否為葉節(jié)點19節(jié)點的創(chuàng)建為了創(chuàng)建一個樹,樹節(jié)點由javax.swing.tree包中的接口TreeNode定義,該接口DefaultMutableTreeNode類實現(xiàn);使用DefaultMutableTreeNode類為樹創(chuàng)建節(jié)點,它的兩個常用的構(gòu)造方法是:

DefaultMutableTreeNode(ObjectuserObject)創(chuàng)建沒有父節(jié)點和子節(jié)點、但允許有子節(jié)點的樹節(jié)點,并使用指定的用戶對象對它進行初始化。DefaultMutableTreeNode(ObjectuserObject,booleanallowsChildren)創(chuàng)建沒有父節(jié)點和子節(jié)點的樹節(jié)點,使用指定的用戶對象對它進行初始化,僅在指定時才允許有子節(jié)點。20例子importjava.awt.Container;importjavax.swing.JFrame;importjavax.swing.JTree;importjavax.swing.tree.DefaultMutableTreeNode;publicclassdemo{JFrameapp; publicdemo() { app=newJFrame("表格例程"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(500,200); Containerd=app.getContentPane();

DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("信息");

String[]gradeName={"碩士學歷","博士學歷","博士后學歷"}; String[][]Teacher=newString[3][]; Teacher[0]=newString[]{"王鵬1","李曼1","韓曉國1"}; Teacher[1]=newString[]{"王鵬2","李曼2","韓曉國2"}; Teacher[2]=newString[]{"王鵬3","李曼3","韓曉國3"}; DefaultMutableTreeNodenode=null; for(inti=0;i<3;i++) { intlength=Teacher[i].length;

node=newDefaultMutableTreeNode(gradeName[i]); for(intj=0;j<length;j++) {

DefaultMutableTreeNodechild=newDefaultMutableTreeNode(Teacher[i][j]);

node.add(child); }

root.add(node); }

JTreetree=newJTree(root); app.add(tree); app.setVisible(true); } publicstaticvoidmain(String[]agrs)throwsException{ newdemo(); }}21總結(jié):樹組件創(chuàng)建的步驟1.創(chuàng)建根節(jié)點2.創(chuàng)建節(jié)點,添加子節(jié)點3.把節(jié)點添加到根節(jié)點中4.創(chuàng)建樹22(3)選項卡組件在JavaGUI中,當界面上需要放置的組件很多時,希望在有限的空間內(nèi)展示更多的內(nèi)容使用JTabbedPane選項卡面板實現(xiàn)在Windows操作系統(tǒng)中經(jīng)常使用到選項卡,例如系統(tǒng)屬性對話框中使用選項卡來組織組件。構(gòu)造方法概述JTabbedPane()創(chuàng)建具有默認的TabbedPane,位于TOPJTabbedPane(inttabPlacement)創(chuàng)建位于指定位置的TabbedPane,T

溫馨提示

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

評論

0/150

提交評論