Java窗體應用程式布局管理器

2020-12-03 米粒教育

窗體裡面有很多組件,這些組件對在窗體中的擺放位置和組件尺寸都有自身的要求,程式設計師添加這些組件到窗體時,該如何安排這些組件在窗體的位置和尺寸呢?這就需要用到Swing的布局管理器。下面主要介紹常用的布局管理器。

絕對布局

程式設計師需要設置每個組件在窗體的大小和位置,在實際編程中,較少採用這種布局管理。使用絕對布局,程式設計師可以採用下面的步驟:

(1)調用窗體的setLayout方法取消窗體的默認布局。調用方法如下:

窗體對象.setLayout(null);

(2)調用組件的setBounds方法,設置組件在窗體的位置和大小。調用方法如下:

組件對象. setBounds(x, y, w, h)

其中,x和y是組件在窗體的坐標,w是窗體的寬度,h是窗體的高度。

案例1創建一個窗體,該窗體使用絕對布局,在窗體中添加兩個JLabel組件。

在項目PCoreUnit13下新建layout包,在layout包內新建JFreamAbsolutelyTest類。代碼如下:

packagelayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.WindowConstants;/*** @ClassName: JFreamAbsolutelyTest* @Description: Swing程序設計(常用布局管理器)案例1* @author 編程訓練營* @date**/publicclass JFreamAbsolutelyTest { /** * @Title: main * @Description:Java程序入口main方法 * @param@param args 參數 * @return void 返回類型 * @throws */publicstaticvoid main(String[] args) { // 實例化JFrame對象 JFrame frame = new JFrame("窗體絕對布局"); // 創建一個標籤組件 JLabel label1 = new JLabel("這是第一個組件"); JLabel label2 = new JLabel("這是第二個組件"); // 窗體設置為絕對布局 frame.setLayout(null); //設置窗體的大小 label1.setBounds(20, 100, 250, 100); label2.setBounds(300, 150, 250, 100); // 將label組件添加到容器 frame.add(label1); frame.add(label2); // 設置窗口的寬度和高度 frame.setSize(500,500); // 窗口居中 frame.setLocationRelativeTo(null); // 設置窗口可見 frame.setVisible(true); //設置窗口關閉方式,窗口關閉程序退出 frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); }}

程序執行結果如下圖所示:

流式布局

窗體按照組件加入的先後順序,遵循從左到右,從上到下的排列方式來安排組件在窗體的位置。具體安排方式:先從窗體的第一行從左到右開始安排組件,當第一行的組件位置已滿時,再從第二行開始安排,以此類推。

流式布局用FlowLayout類來定義,FlowLayout類有三個構造方法,具體說明如下:

public FlowLayout()

該構造方法使用默認方式創建流式布局,組件在窗體中使用居中對齊方式,組件之間的水平和垂直間距都為默認的5個單位。

public FlowLayout(int align)

該構造方法使用指定的對齊方式和默認的5單位水平和垂直間距創建流式布局。參數align可以是下列值之一:,FlowLayout.RIGHT, FlowLayout.CENTER,FlowLayout.LEADING,FlowLayout.TRAILING。

public FlowLayout(int align, int hgap, int vgap)

該構造方法使用指定的對齊方式和指定的水平和垂直間距創建流布局。參數hgap和vgap分別指定水平間距和垂直間距。

案例2創建一個窗體,該窗體使用流式布局,在窗體中添加多個JLabel組件。

在layout包內新建JFreamFlowLayoutTest類。代碼如下:

importjava.awt.FlowLayout;* @ClassName: JFreamFlowLayoutTest* @Description: Swing程序設計(常用布局管理器)案例2publicclass JFreamFlowLayoutTest { JFrame frame = new JFrame("窗體流式布局");// 設置窗體為流式布局 frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20)); // 使用循環添加JLabel組件for( int i = 1; i < 21; i++ ) { JLabel label = new JLabel("這是第" + i + "個組件"); frame.add(label); }

網格布局

將窗體按M行N列方式均勻分隔多個網格,每個網格只能存放一個組件。組件按照加入的先後順序,遵循從左到右,從上到下的排列方式被安置在每個網格中。

網格布局用GridLayout類來定義,GridLayout類有三個構造方法,具體說明如下:

public GridLayout()

該構造方法創建網格布局,默認為每一個組件在一行中有一列,即多行單列。

public GridLayout(int rows, int cols)

該構造方法創建具有指定行數和列數的網格布局。參數rows指定行數,參數cols指定列數。

public GridLayout(int rows, int cols, int hgap, int vgap)

該方法創建具有指定行數和列數的網格布局,並指定每個網格間的水平和垂直間距。參數hgap指定網格間的水平間距,參數vgap指定網格間的垂直間距。

案例3創建一個窗體,該窗體使用網格布局,在窗體中添加多個JLabel組件。

在layout包內新建JFreamGridLayoutTest類。代碼如下:

importjava.awt.GridLayout;* @ClassName: JFreamGridLayoutTest* @Description: Swing程序設計(常用布局管理器)案例3* @datepublicclass JFreamGridLayoutTest { * @param@param args 參數 * * @return void 返回類型 @throws JFrame frame = new JFrame("窗體網格布局"); // 設置窗體為3行2列的網格布局 frame.setLayout(new GridLayout(3,2));for (int i = 1; i < 7; i++) { JLabel label = new JLabel(" 這是第" + i + "個組件");

邊界布局

在邊界布局中,窗體空間被分為五個區域:CENTER、EAST、WEST、NORTH、SOUTH。依次對應為:北(NORTH)、南(SOUTH)、西(WEST)、東(EAST),中(CENTER)。邊界布局是窗體默認的布局。

開發者可以把組件放在窗體這五個位置中的任意一個,如果未指定位置,則預設的位置是CENTER。

邊界布局由BorderLayout類定義,BorderLayout類常用的構造方法說明如下:

public BorderLayout()

該構造方法創建一個邊界布局,組件之間沒有間距。

public BorderLayout(int hgap, int vgap)

該構造方法使用組件之間指定的間距創建一個邊界布局。

窗體調用add方法添加組件時,可以設置待添加的組件在邊界布局中的五個區域之一,這五個區域可以由下列值表示:

BorderLayout. NORTH

窗體添加組件時,將組件置於窗體的頂端(北區域)。

BorderLayout. SOUTH

窗體添加組件時,將組件置於窗體的底端(南區域)。

BorderLayout. EAST

窗體添加組件時,將組件置於窗體的右端(東區域)。

BorderLayout. WEST

窗體添加組件時,將組件置於窗體的左端(西區域)。

BorderLayout. CENTER

窗體添加組件時,將組件置於窗體的中間(中區域)。

案例4創建一個窗體,該窗體使用邊界布局,在窗體中添加多個JLabel組件。

在layout包內新建JFreamBorderLayoutTest類。代碼如下:

importjava.awt.BorderLayout;

importjavax.swing.SwingConstants;* @ClassName: JFreamBorderLayoutTest* @Description: Swing程序設計(常用布局管理器)案例4publicclass JFreamBorderLayoutTest { JFrame frame = new JFrame("窗體邊界布局"); // 設置窗體邊界布局 frame.setLayout(new BorderLayout(30,30)); // 添加JLabel組件到窗體頂端 JLabel label1 = new JLabel("這個組件在頂端"); label1.setHorizontalAlignment(SwingConstants.CENTER); frame.add(BorderLayout.NORTH,label1); // 添加JLabel組件到窗體左端 JLabel label2 = new JLabel("這個組件在左端"); label2.setHorizontalAlignment(SwingConstants.CENTER); frame.add(BorderLayout.WEST,label2); // 添加JLabel組件到窗體右端 JLabel label3 = new JLabel("這個組件在右端"); label3.setHorizontalAlignment(SwingConstants.CENTER); frame.add(BorderLayout.EAST,label3); // 添加JLabel組件到窗體中間 JLabel label4 = new JLabel("這個組件在中間"); label4.setHorizontalAlignment(SwingConstants.CENTER); frame.add(BorderLayout.CENTER,label4); JLabel label5 = new JLabel("這個組件在底端"); label5.setHorizontalAlignment(SwingConstants.CENTER); frame.add(BorderLayout.SOUTH,label5);

相關焦點

  • JAVA Swing程序設計(下)
    三、布局管理器Swing中,每個組件在容器中都有一個具體的位置和大小,在容器中擺放各自組件時很難判斷其具體位置和大小,這裡我們就要引入布局管理器了,它提供了基本的布局功能,可以有效的處理整個窗體的布局。常用的布局管理器包括流布局管理器、邊界布局管理器、網格布局管理器等。
  • 布局管理器-流式布局管理器
    組件不能單獨存在,必須放置於容器當中,而組件在容器中的位置和尺寸是由布局管理器來決定的。在Java.awt包中提供了五種布局管理器,分別是FlowLayout(流式布局管理器),BorderLayout(邊界布局管理器),GridLayout(網格布局管理器),GridBagLayout(網格包布局管理器)和CardLayout(卡片布局管理器)。每個容器在創建時都會使用一種默認的管理器來自動進行組件的布局管理。
  • Java圖像繪製之五大布局管理器
    一、邊框布局管理器當窗體不指定布局類型是,Swing組件的布局方式默認為邊界(BorderLayout)布局管理器,也叫邊框布局管理器,布局管理器將容器劃分為東西南北中五個區域,當容器調用Container類的add()方法時,可以將組件添加到你想要放置的區域,只需調用BorderLayout類中的以下成員變量即可:
  • 用Java繪製K線圖
    【IT168技術文檔】  Java語言中的Applet(Java小程序)和Application(Java應用程式)是在結構和功能上都存在很大差異的兩種不同的編程方式。
  • 如何在Android應用程式上製作基本計算器
    步驟4:步驟4:設置Eclipse Environment 在這一步,我將介紹如何設置Eclipse開發環境,以使您開始編寫第一個Android應用程式。 步驟5:步驟5:為布局創建Textviews 在這一步中,我將介紹如何設計和設置將在Android應用程式中使用的輸入和輸出文本視圖。
  • 「軟帝學院」Java挑戰者專欄:多線程詳解2
    Frame f = new Frame(「my window」);f.setLayout(new FlowLayout());//設置布局管理器f.setSize(500,400);//設置窗體大小f.setLocation(300,200);//設置窗體出現在屏幕的位置f.setIconImage
  • Java中加載資料庫驅動的方式有幾種?背後的原理是什麼?
    Driver接口的類,而是由驅動程序管理器去調用這些驅動。我們通過JDBC驅動程序管理器註冊每個驅動程序,使用驅動程序管理器類提供的方法來建立資料庫連接,而驅動程序管理器類的連接方法則調用驅動程序類的connect方法建立資料庫連接,如下圖所示:
  • 學習java中的GUI必須要知道的兩點,你知道是什麼嗎?
    FlowLayout(流式布局管理器)從左到右的順序排列。Panel(面板)默認的布局管理器。BorderLayout(邊界布局管理器)東,南,西,北,中Frame默認的布局管理器。GridLayout(網格布局管理器)規則的矩陣CardLayout(卡片布局管理器)選項卡打開我們的eclipse多開幾個頁面,這就是卡片布局了
  • 在Access中使用系統表保存應用程式變量
    在開發ACCESS應用程式時,一般需要在窗體和模塊中引用許多變量。為管理這些變量,當然可以在啟動窗體中使用Microsoft Visual Basic for Application(VBA)來設置它們的值,然後再調用某個模塊,由該模塊初始化這些值。
  • Android應用程式設計原理及天氣實況預報系統的具體實現
    但是,並不是每一個Android 應用程式都需要這四種功能組件,而是使用上述四種功能組件的某些組合。Activities是最基本的Android 應用程式組件。在應用程式中,一個Activities通常就是一個單獨的屏幕,大多數應用由多個屏幕顯示組成。
  • 任務管理器無法結束進程?我們還有更厲害的強制關閉卡死程序方法
    相信大家在使用Windows系統的過程中,都碰到過應用程式卡死的情況。應對此問題,我們一般都是等待失去響應的程序恢復,或者是直接使用任務管理器將其強制關閉,然後再重新打開。其實這樣的操作,已經基本能應對大部分卡死的情況了。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。因為Java語言具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點,所以Java可以編寫各種跨平臺應用的桌面應用程式、Web應用程式、分布式系統和嵌入式系統應用程式等。
  • MT管理器下載_MT管理器官方下載「最新版」-太平洋下載中心
    MT管理器下載最新版較第一代版本主要變化:Material界面、增加日夜間模式、提高兼容性、文本編輯器深度優化、增加APK資源混淆、增加APK自定義籤名、增強DEX編輯器、增加單個XML反編譯和回編譯、增強翻譯模式。MT管理器官方下載擁有更多聯網翻譯接口、ARSC編輯器,支持語言包添加刪除和重命名等等功能。太平洋下載中心提供MT管理器官方下載。
  • 任務管理器只會這樣用?
    任務管理器相信很多機友都不會陌生,當電腦遇到系統無響應或黑屏時,大多數情況下,通過Ctrl+Alt+Delete組合鍵都能解決,這麼神仙的快捷鍵當然被用戶廣泛傳播應用。 不過,任務管理器的功能可不僅如此,為了幫助更多Win10用戶用好任務管理器,小M在這裡把任務管理器的功能和使用技巧做了一次匯總
  • Java反射機制深入詳解
    反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。Java 的這一能力在實際應用中也許用得不是很多,但是在其它的程序設計語言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒有辦法在程序中獲得函數定義相關的信息。
  • 用Windows必須知道的任務管理器技巧
    今次要介紹就是Windows中的任務管理器,這個任務管理器從Windows 95就存在在系統中了。其他辦法其實,我們可以選擇一種更簡單的方法,就是右鍵單擊任務欄的空白處,然後單擊選擇「任務管理器」命令。或者,按下「Ctrl+Shift+Esc」組合鍵也可以打開任務管理器,趕快試試吧。
  • WiFi管理器
    WiFi管理器 系統安全
  • Java編程中基礎反射詳細解析
    類加載指的是將類的class文件讀入內存中,並為之創建一個 java.lang.Class對象,也就是說程序使用任何類的時候,都會為其創建一個class對象。2.1 反射基本信息java程序中許多對象在運行時會出現兩種類型:運行時類型和編譯時類型,例如Person p = new Student();這句代碼中p在編譯時類型為Person,運行時類型為