版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章輸入與輸出10.1輸入/輸出流10.2Scanner類
10.3字節(jié)流10.4字符流10.5文件的基本操作
10.1輸入/輸出流(I/O流)
在Java中,通過不同輸入輸出設(shè)備(鍵盤、鼠標、內(nèi)存、顯示器、打印機、網(wǎng)絡等)之間的數(shù)據(jù)傳輸抽象為流(Stream)。一個流可以理解為一個數(shù)據(jù)的序列。
輸入流(InputStream)表示程序從一個源讀取數(shù)據(jù)
輸出流(OutputStream)表示程序向一個目標寫入數(shù)據(jù),程序可以通過流的方式與輸入輸出設(shè)備進行數(shù)據(jù)傳輸。
Java.io包(輸入/輸出包)包含了大部分輸入、輸出操作需要的類,這些流類代表了輸入源和輸出目標。10.1輸入/輸出流(I/O流)I/O流表示運行中的程序的數(shù)據(jù)輸入源或數(shù)據(jù)輸出目標。一個流可以表示許多不同類型的源和目標,鍵盤鼠標文件網(wǎng)絡01001110101輸入流運行程序輸入流(InputStream)輸出流(OutputStream)01001110101運行程序顯示器打印機文件網(wǎng)絡輸出流
字節(jié)流(ByteStreams):處理原始二進制數(shù)據(jù)。
字符流(CharacterStreams):處理字符數(shù)據(jù),自動處理本地字符集的轉(zhuǎn)換。
緩沖流(BufferedStreams):通過減少對本機API的調(diào)用次數(shù)來優(yōu)化輸入和輸出。
掃描和格式化(ScanningandFormatting):允許程序讀取和寫入格式化文本。
來自命令行的I/O(I/OfromtheCommandLine):描述了標準流和控制臺對象。
數(shù)據(jù)流(DataStreams):處理原始數(shù)據(jù)類型和String值的二進制輸入輸出。對象流(ObjectStreams):處理對象的二進制的輸入輸出。java.io包的I/O流類分類為:10.2Scanner類
10.2.1Scanner類的繼承關(guān)系與常用成員方法Scanner類常用于鍵盤的輸入,Scanner類的繼承關(guān)系如下:java.lang.Objectjava.util.ScannerScanner類常用成員方法10.2.2應用舉例運行結(jié)果【示例程序C10_1.java】鍵盤輸入字符串“Java123”,輸出空格之前的字符串“Java”。運行結(jié)果【示例程序C10_2.java】鍵盤輸入字符串“Java123”,輸出“Java123”。運行結(jié)果【示例程序C10_3.java】
利用nextLine()方法,從鍵盤輸入字符串“JavaABC”,輸出“JavaABC”。運行結(jié)果【示例程序C10_4.java】鍵盤輸入整數(shù),浮點數(shù),并輸出。10.3字節(jié)流
10.3.1InputStream類
程序使用字節(jié)流來執(zhí)行
1個字節(jié)(8位
)的輸入和輸出,通常用來處理二進制數(shù)據(jù)。所有字節(jié)流類都來自輸入流
InputStream類和
輸出流OutputStream類,它們是一個抽象類是字節(jié)流的父類。繼承關(guān)系InputStream類的成員方法FileInputStream是InputStream的子類,文件字節(jié)輸入流可以從文件系統(tǒng)中的某個文件中獲得輸入字節(jié),把它輸入到程序中。10.3.1FileInputStream類【示例程序C10_5.java】利用FileInputStream類,編程實現(xiàn)從文件t1.txt中讀取數(shù)據(jù),輸出到屏幕。使用步驟:(1)創(chuàng)建一個FileInputStream流對象,綁定一個數(shù)據(jù)源文件;(2)調(diào)用read()方法讀取數(shù)據(jù);(3)調(diào)用close()方法釋放資源。10.3.2OutputStream類繼承關(guān)系OutputStream類的成員方法運行結(jié)果FileOutputStream是OutputStream的子類,是文件字節(jié)輸出流。程序中的字節(jié)數(shù)據(jù)可以通過該流將字節(jié)數(shù)據(jù)輸出到某個文件中。10.3.3FileOutputStream類【示例程序C10_6.java】通過鍵盤輸入數(shù)據(jù),利用FileOutputStream類將讀到的數(shù)據(jù)寫入文件t2.txt中。使用步驟:(1)創(chuàng)建一個FileOutputStream流對象,綁定一個目標文件;(2)調(diào)用write(c)方法寫數(shù)據(jù)到目標文件;(3)調(diào)用close()方法釋放資源。運行結(jié)果10.4字符流
符號是構(gòu)成語言和程序的基本單位。Java語言不采用通常計算機語言系統(tǒng)所采用的ASCII代碼集,而是采用更為國際化的Unicode字符集。
ASCII字符集:字符表示一個字節(jié)(8比特),一個字符就是一個字節(jié)。例如:char類型占1個字節(jié)。Unicode編碼:字符表示兩個字節(jié)(16比特)一個字符就是二個字節(jié)。例如:char類型占2個字節(jié)。
為了實現(xiàn)與其他程序語言及不同平臺之間交互,Java提供16位的數(shù)據(jù)流(字符流)處理方案。字符流分為輸入字符流和輸出字符流,分別對應Reader和Writer類。10.4.1Reader類和Writer類繼承關(guān)系Reader類和Writer類是抽象類,是字符流的父類10.4.2FileReader類和FileWriter類FileReader類是Reader的子類,是文件字符輸入流。通過該流可以將某個文件中的數(shù)據(jù)按字符方法讀到運行的程序中。FileWriter類是Writer的子類,是文件字符輸出流。程序中的字符數(shù)據(jù)可以通過該流將字符數(shù)據(jù)輸出到某個文件中?!臼纠绦駽10_7.java】
利用FileWriter類實現(xiàn)將程序中的字符串存儲到文件t3.txt。運行結(jié)果運行結(jié)果【示例程序C10_8.java】
利用FileReader實現(xiàn)讀取文件t3.txt的字符數(shù)據(jù),并顯示在屏幕上。10.5文件的基本操作
在計算機系統(tǒng)中,需要長期保留的數(shù)據(jù)是以文件的形式存放在磁盤等外部存儲設(shè)備中。
文件的最基本的操作包括創(chuàng)建文件,查找文件、刪除文件,讀/寫文件,設(shè)置文件的讀寫位置,文件的打開和關(guān)閉等操作。
目錄作為管理文件的特殊機制,是為了對文件實施有效的管理,提高文件的存取速度,方便用戶對文件的操作。一個目錄(也稱文件夾)包含文件和目錄。同類文件保存在同一目錄下可以簡化文件的管理,提高工作效率。10.5.1File類java.io.File類的父類是java.lang.Object。File類以抽象的方式代表文件名和目錄路徑名,是專門用來管理磁盤文件和目錄的。每個File類的對象表示一個文件或目錄,其對象屬性中包含了文件或目錄的相關(guān)信息,如文件或目錄的名稱、文件的長度、目錄中所含文件的個數(shù)等。該類主要用于文件和目錄的創(chuàng)建、查找、刪除等操作?!臼纠绦駽10_9.java】
獲取文件C10_8.java的文件名、長度、大小等特性。運行結(jié)果【示例程序c10_10.java】
顯示"F:\eclipse-workspace\ch10"文件夾的內(nèi)容。運行結(jié)果10.5.2File類配合字節(jié)流完成文件的讀/寫操作1.利用字節(jié)文件輸入流完成文件的讀取步驟:FilefilePath=newFile(本地路徑)//創(chuàng)建或綁定一個數(shù)據(jù)源文件FileInputStreamin=newFileInputStream(filePath)//建立數(shù)據(jù)的輸入通道in.read();//讀取文件中的數(shù)據(jù)close()//釋放資源2.利用字節(jié)文件輸出流完成文件的寫入步驟:FilefilePath=newFile(本地路徑)//綁定一個數(shù)據(jù)源文件FileOutputStreamout=newFileOutputStream(filePath)//建立數(shù)據(jù)的輸入通道out.write();//寫入數(shù)據(jù)到文件close()//釋放資源【示例程序C10_11.java】
直接利用FileInputStream類和FileOutputStream類完成從鍵盤讀入數(shù)據(jù)寫入文件中,再從寫入的文件中讀出數(shù)據(jù)打印到屏幕上的操作。10.5.3File類配合字符流完成文件的讀/寫操作1.利用字符文件輸入流完成文件的讀取步驟:FilefilePath=newFile(本地路徑)//創(chuàng)建或綁定一個數(shù)據(jù)源文件FileReaderin=newFileReader(filePath)//建立數(shù)據(jù)的輸入通道in.read();//讀取數(shù)據(jù)close()//釋放資源2.利用字符文件輸出流完成文件的寫入步驟:FilefilePath=newFile(本地路徑)//綁定一個數(shù)據(jù)源文件
FileWriterout=newFileWriter(filePath)//建立數(shù)據(jù)的輸入通道out.write();//寫入數(shù)據(jù)close()//釋放資源
【示例程序C10_12.java】將data1.txt文件復制到data2.txt文件中。10.5.4隨機訪問文件文件存取方式:順序存?。褐荒軓奈募钠鹗嘉恢孟蚝箜樞蜃x/寫。隨機存?。和ㄟ^文件位置指針,讀/寫任意位置的數(shù)據(jù)。java.io包提供的RandomAccessFile類可以實現(xiàn)對文件的隨機存取。構(gòu)造方法有兩種:(1)?RandomAccessFile(Stringname,Stringmode):創(chuàng)建一個隨機訪問文件流,從具有指定名稱的文件中讀取或可選地寫入文件。(2)?RandomAccessFile(Filef,Stringmode):創(chuàng)建一個隨機訪問文件流,從file參數(shù)指定的文件中讀取或可選地寫入該文件。其中:mode參數(shù)指定打開文件的訪問模式,其含義如表所示。對文件位置指針的操作輸入操作:從文件指針處開始讀取字節(jié),并使文件指針向前移動超過所讀取的字節(jié)。如果隨機訪問文件是在讀寫模式下創(chuàng)建的,那么輸出操作也可用。輸出操作:從文件指針開始寫入字節(jié),并使文件指針向前移動,超過寫入的字節(jié)。
文件指針通過getFilePointer方法讀取,通過seek方法設(shè)置。RandomAccessFile類對象的文件位置指針遵循以下規(guī)則:(1)新建RandomAccessFile對象文件位置指針位于文件的開頭處。(2)每次讀/寫操作之后,文件位置指針都后移相應個讀/寫的字節(jié)數(shù)。(3)利用seek(?)方法可以移動文件位置指針到一個新的位置。(4)利用getPointer(?)方法可獲得本文件當前的文件位置指針。(5)利用length(?)方法可得到文件的字節(jié)長度。利用getPointer(?)方法和length(?)方法可以判斷讀取的文件是否到文件尾部。【示例程序C14_13.java】從鍵盤輸入五個整數(shù)并寫入F:/eclipse-workspace/ch10\t4.txt中,再從這個文件中隨機讀出其中的某個數(shù)(由鍵盤輸入確定),將它顯示在屏幕上,同時允許用戶對這個數(shù)進行修改。EclipseIDE顯示的第10章ch10工程中示例程序的創(chuàng)建位置第11章GUI設(shè)計概述及布局管理11.1GUI的基礎(chǔ)包11.2Swing組件11.3JFrame窗體11.4布局管理器11.5Jpanel容器11.1GUI的基礎(chǔ)包
圖形用戶界面(GraphicsUserInterface,GUI)為應用程序提供了一個圖形化的界面,實現(xiàn)人機交互。Java中構(gòu)成圖形用戶界面的各種元素,稱為組件。組件分為容器類和非容器類組件兩大類:Java圖形界面的元素1.非容器類組件非容器類組件不能獨立存在,必須放在容器組件內(nèi)使用。例如:單選按鈕、復選按鈕、下拉列表,文本框、文本區(qū)域,有命令類的按鈕、菜單等。2.容器組件容器組件是可以包含組件和其他容器的組件。容器中的布局管理器管理組件在容器組件中的可視化位置。用容器簡化圖形化界面的設(shè)計,以整體結(jié)構(gòu)來布置界面。例如:一個窗體容器內(nèi)部將包含許多界面成分和元素,其中某些界面元素本身也可能又是一個容器組件,這個容器組件再進一步包含它的界面成分和元素,依此類推就構(gòu)成一個復雜整體圖形界面。構(gòu)建GUI的Java包AWT(java.awt)和Swing(javax.swing)包是Java為GUI設(shè)計提供了一組用于構(gòu)建圖形用戶界面(GUI)以及向Java應用程序添加豐富的圖形功能和交互性的工具類庫。Java.awt.Component(組件類)Java.awt.Container(容器)Java.awt.WindowJava.awt.FrameJava.awt.DialogJavax.swing.JComponentJavax.swing.JFrameJavax.swing.JDialogJavax.swing.JWindowAWT與Swing組件類的繼承關(guān)系(1)創(chuàng)建組件(Component):創(chuàng)建組成界面的各種元素,如建立容器組件和非容器組件對象,指定其大小等屬性等。(2)指定布局(Layout):使用某種布局策略,將該組件對象加入到某個容器中的指定位置。(3)響應事件(Event):定義圖形用戶界面的事件和各界面元素對不同事件的響應,
從而實現(xiàn)圖形用戶界面與用戶的交互功能。Swing組件構(gòu)造應用程序的圖形界面實現(xiàn)步驟:javax.swing包中定義的組件可以分為重量級組件和輕量級組件。11.2Swing組件在任何用Swing構(gòu)建的GUI中都必須至少有一個重量級組件(hevayweightcomponent)。重量級組件稱為頂級(TopLevel)容器組件。頂層容器組件屬于窗口(Window)類組件,例如:JFrame、JDialog、JWindow。Swing的重量級組件1.JFrame容器:是Java.awt包中的Frame類的子類,可以創(chuàng)建一個帶有標題和邊框的頂層窗體。2.JWindow容器:是Java.awt包中的Window類的子類,可以創(chuàng)建一個無標題欄,無窗口按鈕的頂層窗體。3.JDialog容器:是Java.awt包中的Dialog類的子類,可以創(chuàng)建一個對話框窗體,例如:在JFrame容器中,創(chuàng)建Dialog類對話窗體對象,當單擊“顯示自定義對話框”按鈕時,彈出對話框窗體信息。Swing的輕量級組件
輕量級組件(lightweightcomponent)是繼承JComponent抽象類的組件,是實現(xiàn)人機交互的基本組件,它們必須被放到重量級組件中才能顯示。這些組件可以分為下述幾類:1.中間容器。常常作為JFrame的中間容器嵌入在JFrame容器中。例如:JPanel(面板容器),JScrollPane(滾動條容器),JSplitPane(分隔容器),JTabbedPane(選項卡容器),JToolBar(工具欄容器)等。
(a)綠色為JPanel容器(b)JScrollPane滾動條容器
(c)JSplitPane分隔容器
(d)JTabbedPane
選項卡容器
JRootPane(根面板容器):每一個頂級容器內(nèi)都含有根面板容器。JLayeredPane(分層面板容器):提供在若干層上添加組件的能力。JInternalFrame(內(nèi)部窗體容器):支持在
JFrame
窗口內(nèi)部顯示一個完整的子窗口,并提供了許多拖動、關(guān)閉、調(diào)整大小、標題顯示等功能。2.專用容器。在UI中起特殊作用的中間層。
JInternalFrame專用容器
3.基本組件。這些組件稱為非容器組件。JLabel(標簽),Jbutton(按鈕),JCheckBox(復選框),
JRadioButton(多選按鈕),JComboBox(下拉式列表),JList(列表),JTextField(文本框),JTextArea(文本域),JMenu(菜單)非容器組件基本組件分為三類:(1)不可編輯信息的顯示組件:JLabel,JProgressBar(進度條)等;(2)可編輯信息的顯示組件:JTable(表格),JTextArea,JTextField等;(3)對話框組件:JColorChooser(顏色選擇器),JFileChooser(文件選擇器)等。
JFrame容器組件的結(jié)構(gòu)JFrame容器組件的結(jié)構(gòu)1.根面板組件(JRootPane):JRootPane是在JFrame窗體創(chuàng)建時就默認添加進來的,是所有其他面板組件的父類,它負責管理JLayeredPane與glassPane。默認情況下,JRootPane可見且不透明的。2.玻璃面板組件(glassPane):
glassPane位于其它面板的頂層,就像在所有面板上覆蓋了一層完全透明的玻璃,該面板總是存在的,默認情況下,glassPane是透明的且不可見的,可用于接收鼠標事件和在其他組件上繪圖。JRootPane的組成11.3JFrame容器組件
3.分層面板組件(JLayeredPane):JLayeredPane位于
JRootPane上面,再次覆蓋JFrame的整個表面。JLayeredPane包含JMenuBar和contentPane,是它們的直接父類,也是添加到contentPane中的所有組件的祖父類。若添加contentPane和JMenuBar到JLayeredPane,則JMenuBar會被添加到JLayeredPane的頂部,剩下的部分被contentPane填充。
JLayeredPane分為很多層,每一層都相當于一個容器組件,通過JLayeredPane對組件的重疊管理,我們可以設(shè)計出相互重疊的內(nèi)部窗體組件。默認情況下,JLayeredPane是透明的且可見的。
JLayeredPane分層說明如下:DEFAULT_LAYER:默認層(標準層)。大部分組件都在這里。這是最下面的一層。PALETTE_LAYER:調(diào)色板層。位于默認層之上。對于浮動工具欄和調(diào)色板非常有用,因此它們可以被放置在其他組件的上方。MODAL_LAYER:模式層。用于模態(tài)對話框的層。它們將出現(xiàn)在容器中任何工具欄、調(diào)色板或標準組件的頂部。POPUP_LAYER:彈出層。顯示上面的對話框。這樣與組合框、工具提示和其他幫助文本相關(guān)聯(lián)的彈出窗口將出現(xiàn)在生成它們的組件、面板或?qū)υ捒虻纳戏健RAG_LAYER:拖動層。當拖動一個組件時,將其重新分配到拖動層可以確保它位于容器中其他所有組件之上。當完成拖動時,它可以被重新分配到它的正常層。
4.內(nèi)容面板組件(contentPane):contentPane是LayeredPane內(nèi)的一層,默認情況下,contentPane是可見且不透明的,我們創(chuàng)建的JFrame窗體,實際上看到的是contentPane中的內(nèi)容。內(nèi)容面板組件在窗體組件中起著工作區(qū)的作用,通常我們會將其它組件放在contentPane上。5.菜單欄組件(JMenuBar):
JMenuBar是可選項。JRootpaneglassPane(透明的面版)
JLayeredPane(管理菜單與內(nèi)容窗格)JMenuBar(菜單欄,可選項)
contentPane(內(nèi)容窗格)組件一般添加到contentPane中主要功能是它或以捕獲JFrame上的任何事件。例如:攔截鼠標的移動例如:frame=newJFrame();JLabellb=newJLabel(“標簽");frame.getContentPane().add(lb,BorderLayout.CENTER);1.JFrame類的繼承關(guān)系如下:
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
JFrame繼承原有的AWT中的Frame類;JFrame類窗體組件類結(jié)構(gòu)
JFrame類常用的構(gòu)造方法:JFrame():構(gòu)造一個初始不可見的新窗體;JFrame(String):用指定的標題創(chuàng)建一個新的初始不可見的窗體。3.JFrame類常用的成員方法成員方法描述所屬類setSize(intwidth,intheight)設(shè)置窗體的寬與高,單位為像素WindowsetBackground(Colorc)參數(shù)c設(shè)置窗體的背景顏色ComponentsetLocation(intx,inty)設(shè)置組件的顯示位置WindowsetLocation(pointp)
用point來設(shè)置組件的顯示位置WindowsetLocationRelativeTo(null)窗口居屏幕中央WindowsetVisible(booleanb)根據(jù)參數(shù)b的值顯示或隱藏此組件。Windowadd(Componentcomp)向容器中增加組件ContainersetLayout(LayoutManagermgr)設(shè)置此容器的布局管理器。Containerpack()
調(diào)整窗口大小,使其適應組件的大小和布局。WindowsetTitle()設(shè)置窗體標題FramesetBounds(int
x,int
y,int
width,int
height)移動并調(diào)整該組件的大小。WindowgetContentpane()返回此窗體的contentPane對象JFramesetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)設(shè)置同步開關(guān),關(guān)閉窗體的同時,終止程序的運行。JFrame
JFrame容器的使用創(chuàng)建一個簡單JFrame窗體需要完成:創(chuàng)建一個JFrame窗體對象,修改窗體外觀,設(shè)置窗體是否可見,在窗體內(nèi)添加組件等步驟。1.創(chuàng)建一個JFrame窗體對象。用JFrame類常用的構(gòu)造方法來創(chuàng)建。JFrame(); //創(chuàng)建一個無標題的窗體JFrame(Stringtitle);//創(chuàng)建一個有標簽的窗體2.修改窗體外觀。包括:設(shè)置窗體標簽、窗體位置、窗體的大小及窗體的背景顏色等。setTitle(Stringtitle); //設(shè)置窗體標簽setLocation(intx,inty); //設(shè)置窗體位置setSize(intwidth,intheight); //設(shè)置窗體的大小setBounds(intx,inty,intwidth,intheight);//重新調(diào)整窗體的位置和大小getContentpane();//返回此窗體的contentPane對象setBackground(ColorbgColor); //設(shè)置此窗體的背景顏色
設(shè)置窗體是否可見。窗體在默認情況下是不可見的setVisible(booleanb);//設(shè)b為true,則窗體可見4.添加組件到窗體上
窗體是圖形用戶界面中頂級容器組件,它可以容納其他多個容器組件,也可以容納多個非容器組件。不能把組件直接添加到JFrame窗體上,要先獲得窗體的內(nèi)容面板(ContentPane),然后把組件添加到內(nèi)容面板上。Java中組件放置在ContentPane的什么位置,不是通過坐標控制,而是由“布局管理器”來決定
【示例程序C11_1.java】創(chuàng)建一個JFrame窗體,要求:窗體標簽是“這是一個JFrame”,窗體的背景是黃顏色,窗體距屏幕左面100個像素,距屏幕上方50個像素,窗體的寬度為400像素,高度為200像素,程序運行后窗體是可見的。400像素200像素(0,0)(100,50)yx100像素50像素窗體距屏幕左面100個像素,距屏幕上方50個像素,窗體的寬度為400像素,高度為200像素。11.4布局管理器本章實現(xiàn)的布局BorderLayoutGridLayoutFlowLayoutCardLayoutJava在布局管理上面采用了容器和布局管理相分離的方案。也就是說,容器只管將組件放入其中,而不管這些組件放置在容器中的位置和大小,容器中所有組件的布局(位置和大?。┯刹季止芾砥鱽砜刂?。
Java語言中提供了FlowLayout(流式布局)、BorderLayout(邊界布局)、GridLayout(網(wǎng)格布局)、CardLayout(卡片布局)和GridBagLayout(網(wǎng)格袋布局)、BoxLayout(箱式布局)、GroupLayout(分組布局)、SpringLayout(彈性布局)等多種布局管理器。每種容器都有自己缺省的布局管理器。
如果不希望使用缺省的布局管理器,則可使用所有容器的父類Container的setLayout()方法來改變?nèi)笔〉牟季止芾砥鳌?/p>
java.awt.BorderLayout類是java.lang.Object類的直接子類。BorderLayout是JFrame的內(nèi)容面板ContentPane默認的布局模式。BorderLayoutBorderLayout類有兩個構(gòu)造方法,分別是:(1)BorderLayout()方法。用于創(chuàng)建一個各組件間的水平、垂直間隔均為0的BorderLayout類的對象;(2)BorderLayout(inthgap,intvgap)方法。用于創(chuàng)建一個各組件間的水平間隔為hgap、垂直間隔為vgap的BorderLayout類的對象。NORTH和SOUTH組件可以在水平方向上拉伸,而EAST和WEST組件可以在垂直方向上拉伸,CENTER組件在水平和垂直方向上都可拉伸,從而填充所有剩余空間。如果某個區(qū)域沒有分配組件,則其他組件可以占據(jù)它的空間。BorderLayout五個區(qū)域的位置常量:BorderLayout.NORTH//容器的北邊BorderLayout.SOUTH//容器的南邊BorderLayout.WEST//容器的西邊BorderLayout.EAST//容器的東邊BorderLayout.CENTER//容器的中心BorderLayout僅指定了五個區(qū)域的位置,如果容器中需要加入的組件超過五個,就必須使用容器的嵌套或改用其他的布局策略。
【示例程序C11_2.java】創(chuàng)建一個窗體,使用BorderLayout布局模式,在窗體中添加5個按鈕組件,按鈕的標簽是North、South、East、West、Center。運行結(jié)果
java.awt.FlowLayout類是java.lang.Object類的直接子類。FlowLayout的默認布局策略是按照加入容器中組件的先后順序從左向右排列,當一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中排列。當容器被重新設(shè)置大小后,則布局也將隨之發(fā)生改變。各個組件大小不變,而其相對位置會發(fā)生變化FlowLayout1.FlowLayout類有三個構(gòu)造方法:(1)?FlowLayout(?)。構(gòu)造一個新的FlowLayout,默認組件居中對齊的,組件之間水平和垂直間隙是5個像素(2)?FlowLayout(intalign)。構(gòu)造一個新的FlowLayout,按照align值確定對齊方式,默認是組件之間水平和垂直間隙是5個像素,參數(shù)align值可以設(shè)定為0、1、2、3、4,其意義如下:0或FlowLayout.LEFT,
組件左對齊1或FlowLayout.CENTER,組件居中對齊2或FlowLayout.RIGHT,組件右對齊3或FlowLayout.LEADING,每一行組件都應該對齊到容器方向的前沿,例如,在從左到右的方向中向左對齊。4或FlowLayout.TRAILING,每行組件應該對齊到容器方向的后緣,例如,在從左到右的方向中向右對齊。如果是0、1、2、3、4之外的整數(shù),則為左對齊(3)?FlowLayout(intalign,inthgap,intvgap)方法。用于創(chuàng)建一個既指定對齊方式,又指定組件間間隔的FlowLayout類的對象。參數(shù)align作用及取值同上;參數(shù)hgap指定組件間的水平間隔;vgap指定組件間的垂直間隔;間隔單位為像素點值。2.FlowLayout類的常用成員方法如下:voidsetAlignment(intalign):設(shè)置此布局的對齊方式。voidsetHgap(inthgap):設(shè)置組件之間以及組件與Container的邊之間的水平間隙。voidsetVgap(intvgap):設(shè)置組件之間以及組件與Container的邊之間的垂直間隙對于一個原本不使用FlowLayout布局編輯器的容器,若需要使用該布局策略,可以用setLayout(newFlowLayout(?))方法設(shè)置。該方法是所有容器的父類Container的方法,用于為容器設(shè)定布局。
【示例程序C10_3.java】
在JFrame窗體的內(nèi)容面板上添加三個按鈕,使用FlowLayout布局管理,指定對齊方式及間隔方方式。align=0的情況
align=1的情況
圖(a)FlowLayout(0)
圖(b)FlowLayout(1)運行結(jié)果
java.awt.CardLayout類是java.lang.Object類的直接子類。CardLayout的布局方式是將每個組件看成一張卡片,如同撲克牌一樣將組件堆疊起來,而顯示在屏幕上的每次只能是最上面的一個組件,這個被顯示的組件將占據(jù)所有的容器空間。當容器第一次顯示時,第一個添加到CardLayout的組件為可見組件。程序中可通過他的方法選擇顯示其中的卡片。1.CardLayout類有兩個構(gòu)造方法:(1)CardLayout(?)方法。使用默認(間隔為0)方式創(chuàng)建一個CardLayout(?)類對象。(2)CardLayout(inthgap,intvgap)方法。使用hgap指定的水平間隔和vgap指定的垂直間隔創(chuàng)建一個CardLayout(?)類對象。CardLayout2.CardLayout類的常用成員方法成員方法說
明first(Containercontainer)顯示container中的第一個卡片last(Containercontainer)顯示container中的最后一個卡片next(Containercontainer)顯示下一個卡片previous(Containercontainer)顯示上一個卡片
【示例程序C11_4.java】
在JFrame窗體的內(nèi)容面板上添加三個按鈕,使用CardLayout布局管理方式,顯示第二張卡片。運行結(jié)果GridLayoutjava.awt.GridLayout類是java.lang.Object類的直接子類。GridLayout的布局策略是把容器分成大小相等的矩形,一個矩形中放置一個組件,而每個組件按添加的順序從左向右、從上向下地占據(jù)這些網(wǎng)格。當改變?nèi)萜鞔笮『?,其中的組件相對位置不變,但大小改變。1.GridLayout類的三個構(gòu)造方法:(1)?GridLayout(?)。創(chuàng)建一個1行1列的GridLayout布局。(2)?GridLayout(introws,intcols)方法。創(chuàng)建一個具有rows行、cols列的GridLayout布局。(3)?GridLayout(introws,intcols,inthgap,intvgap)。按指定的行數(shù)rows、列數(shù)cols、水平間隔hgap和垂直間隔vgap創(chuàng)建一個GridLayout布局。2.GridLayout類常用的成員方法方法說明getColumns()獲取此布局中的列數(shù)。getHgap()獲取組件之間的水平間距getRows()獲取此布局中的行數(shù)。getVgap()獲取組件之間的垂直間距removeLayoutComponent(Componentcomp)從布局移除指定組件setColumns(intcols)將此布局中的列數(shù)設(shè)置為指定值setHgap(inthgap)將組件之間的水平間距設(shè)置為指定值setRows(introws)將此布局中的行數(shù)設(shè)置為指定值setVgap(intvgap)將組件之間的垂直間距設(shè)置為指定值toString()返回此網(wǎng)格布局的值的字符串表示形式
【示例程序C11_5.java】
在JFrame窗體的內(nèi)容面板上添加4個帶標簽的按鈕,使用GridLayout的布局。運行結(jié)果BoxLayoutjavax.swing.BoxLayout類是java.lang.Object類的直接子類,BoxLayout是通用布局管理器,可以將組件左到右水平排列放置,也可以將它們從上到下垂直排列放置。1.BoxLayout類的構(gòu)造方法:BoxLayout(Containertarget,intaxis)
創(chuàng)建一個將沿給定軸放置組件的布局管理器。其中,target是容器對象;axis指明target中組件的排列方式,axis參數(shù)的值如下:BoxLayout.X_AXIS:指定組件從左到右水平排列放置;BoxLayout.Y_AXIS:指定組件從上到下垂直排列放置;BoxLayout.LINE_AXIS:根據(jù)目標容器的ComponentOrientation屬性確定的文本行方向放置組件;BoxLayout.PAGE_AXIS:根據(jù)目標容器的ComponentOrientation屬性確定的文本行在頁面中的流向來放置組件。2.BoxLayout類常用的成員方法getAxis():返回用于布局組件的軸。getLayoutAlignmentX(Containertarget):返回容器沿X軸的對齊方式。getLayoutAlignmentY(Containertarget):
返回容器沿Y軸的對齊方式getTarget():返回使用此布局管理器的容器。
【示例程序C11_6.java】
在JFrame窗體的內(nèi)容面板上添加2個帶標簽的按鈕,使用BoxLayout.Y_AXIS的垂直布局。
【示例程序C11_7.java】
在JFrame窗體的內(nèi)容面板上添加2個帶標簽的按鈕,使用BoxLayout.LINE_AXIS的布局。Box是一個輕量級容器組件,他的默認布局是BoxLayout,而且只能是這個布局。每一個Box容器組件只能按照水平或垂直方式排列。Box類提供4種不可見組件可以填充其他組件之間空隙。Box
類繼承關(guān)系如下:java.lang.Objectjava.awt.Componentjava.awt.Containerjavax.swing.JComponentjavax.swing.Box1.Box類的構(gòu)造方法:Box(int
axis)創(chuàng)建一個沿指定軸放置組件的Box布局管理器。其中axis
可以是
:BoxLayout.X_AXIS、
BoxLayout.Y_AXIS、BoxLayout.LINE_AXIS
或
BoxLayout.PAGE_AXIS。Box容器組件的BoxLayout布局2.Box類的常用的成員方法類型方法說明static
ComponentcreateGlue()創(chuàng)建一個不可見的"glue"組件,其可見組件有一個最大寬度(對于橫向box)或高度(對于縱向box)的Box,該組件可能很有用。static
BoxcreateHorizontalBox()創(chuàng)建一個從左到右顯示其組件的
Box。static
ComponentcreateHorizontalGlue()創(chuàng)建一個水平方向膠狀的不可見glue組件,用于撐滿水平方向剩余的空間static
ComponentcreateHorizontalStrut(int
width)創(chuàng)建一個不可見的、固定寬度的Strut組件。static
ComponentcreateRigidArea(Dimension
d)創(chuàng)建一個固定寬高的不可見組件rigidAreas組件。static
BoxcreateVerticalBox()創(chuàng)建一個從上到下顯示其組件的
Box。static
ComponentcreateVerticalGlue()創(chuàng)建一個垂直方向膠狀的不可見glue組件,用于撐滿垂直方向剩余的空間static
ComponentcreateVerticalStrut(int
height)創(chuàng)建一個不可見的、固定高度的Strut組件。3.Box
類可以創(chuàng)建不可見組件Glue、Struts和
RigidArea,不可見組件的作用是:
Glue:Glue組件水平或垂直方向?qū)蛇叺慕M件擠到容器的兩端。例如:firstComponent組件和secondComponent組件為水平方向排列,Glue水平方向設(shè)置組件:container.add(firstComponent);container.add(Box.createHorizontalGlue());container.add(secondComponent);Glue組件樣式②Strut:Strut組件將兩端的組件按水平或垂直方向指定的大小分開。例如:firstComponent組件和secondComponent組件為水平方向排列,Strut水平方向指定組件間隔為x像素:container.add(first
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國安全控制系統(tǒng)行業(yè)應用狀況及投資模式分析報告
- 2024-2030年中國嬰幼兒產(chǎn)品市場競爭力策略及投資盈利分析報告
- 2024-2030年中國大提花貢緞行業(yè)競爭格局及前景趨勢預測報告
- 2024-2030年中國臺階鏜刀行業(yè)市場發(fā)展規(guī)模及投資可行性分析報告
- 眉山藥科職業(yè)學院《國際商務談判實務》2023-2024學年第一學期期末試卷
- 2024年昆明住宅購買合同
- 2024年漁業(yè)供貨合同
- 主鏡頭和關(guān)系鏡頭
- 2024年度網(wǎng)絡安全防護技術(shù)支持服務合同范本3篇
- 呂梁師范高等專科學?!妒称飞锛夹g(shù)專題》2023-2024學年第一學期期末試卷
- 0-3歲嬰幼兒營養(yǎng)與健康智慧樹知到期末考試答案章節(jié)答案2024年杭州師范大學
- 2025屆新高考物理熱點精準復習:高中物理6大模塊計算題思路總結(jié)
- 八年級道法上冊第一學期期末綜合測試卷(人教版 2024年秋)
- 2025屆江蘇省期無錫市天一實驗學校數(shù)學七年級第一學期期末達標檢測試題含解析
- UG基礎(chǔ)培訓課件
- 城市軌道交通運營管理【共30張課件】
- 鋼結(jié)構(gòu)設(shè)計智慧樹知到期末考試答案章節(jié)答案2024年山東建筑大學
- 2024年廣東省廣州市荔灣區(qū)中考一模語文試題
- 人教版四年級上冊數(shù)學數(shù)學復習資料
- TD/T 1066-2021 不動產(chǎn)登記數(shù)據(jù)庫標準(正式版)
- 睡眠中心宣傳方案
評論
0/150
提交評論