Java GUI 佈局管理器

来源:https://www.cnblogs.com/chy18883701161/archive/2019/06/21/11066410.html
-Advertisement-
Play Games

容器可設置佈局管理器,管理容器中組件的佈局: container.setLayout(new XxxLayout()); Java有6種佈局管理器,AWT提供了5種: FlowLayout BorderLayout GridLayout GridBagLayout CradLayout Swing還 ...


容器可設置佈局管理器,管理容器中組件的佈局:

container.setLayout(new XxxLayout());

 

Java有6種佈局管理器,AWT提供了5種:

  • FlowLayout
  • BorderLayout
  • GridLayout
  • GridBagLayout
  • CradLayout

Swing還提供了一種:

  • BoxLayout

 

 

 

1、FlowLayout     流式佈局

顧名思義,組件像水流一樣,從第一行開始,從左向右依次排列,碰到邊界時轉到下一行繼續。

三個構造函數:

  • FlowLayout()     //使用預設參數
  • FlowLayout(int align)   //設置對齊方式
  • FlowLayout(int align,int hgap,int vgap)   //設置對齊方式、水平間距、垂直間距

align是FlowLayout類的常量,比如:FlowLayout.LEFT,FlowLayout.CENTER

 

 

 

2、BorderLayout   邊界佈局

將容器劃分為EAST、WEST、SOUTH、NORTH、CENTER五個部分,每個部分可放置一個組件。

2個構造函數:

  • BorderLayout()  //使用預設參數
  • BorderLayout(int hgap,int vgap)   //設置水平間距、垂直間距

放置組件時需指定位置:

  • container.add(Component  comp, Borderlayout.SOUTH);    //第二個參數是BorderLayout類的常量,指定組件位置
  • container.add(Component comp);   //預設位置時,預設為BorderLayout.CENTER,放在中間

一共5個位置,一個位置最多放1個組件。

當然,可以在一個位置放置多個組件,只是後放置的組件會覆蓋之前放置的組件。也可以一個都不放。

 

 

 

3、GridLayout   網格佈局

將容器劃分為指定行數、列數的網格,每個格子的尺寸都相同,一個格子中放置一個組件,適合組件大小差不多的,比如放置計算器的按鈕。

從左往右、從上往下依次放置。

註意,網格線實際是不顯示的。

2個構造函數:

  • BorderLayout(int rows,int cols)   //設置行數、列數
  • BorderLayout(int rows,int cols,int  hgap,int vgap)    //設置行數、列數、水平間距、垂直間距

 

 

 

4、GridBagLayout   網格包佈局

在GridLayout基礎上發展而來,比GridLayout更加靈活。功能最強大,但也是最複雜的。

使用步驟:

(1)創建並指定佈局管理器

  GridLayout  layout=new GridLayout();

  container.setLayout(layout);

(2)創建GridBagConstraints對象並設置屬性

  GridBagConstraints  constraints=new GridBagConstraints();

  constraints.gridx=2;   //設置該組件的起始位置的x坐標

  constraints.gridy=1;  //設置該組件的起始位置的y坐標

  constraints.gridwidth=2;  //設置該組件水平占據幾個網格

  constraints.gridheight=1;   //設置改組件豎直方向占據幾個網格

(3)建立佈局管理器、組件、GridBagConstraints對象中間的關聯

  layout.setConstraints(component, constraints);     //第一個參數是組件,第二個是GridBagConstraints對象

  GridBagLayout用一個GridBagConstraints對象設置一個組件的位置

(4)向容器中添加組件

  container.add(component);

 

添加組件時,重覆(2)、(3)、(4)步。

GridBagConstraints有很多屬性,比如fill——如何填充網格,此處不再一一列舉。

 

 

 

 

5、CardLayout   卡片佈局

將容器中的所有組件(通常是容器)當做一疊卡片,只顯示一張卡片(一個組件)。

2個構造函數:

  • CradLayout()
  • CardLayout(int hgap,int vgap)   //設置卡片與容器(左右、上下)邊界的的距離

使用步驟:

(1)創建並指定佈局管理器

  CardLayout  layout=new CardLayout(10,10);

  container.setLayout(layout);

(2)往容器中添加卡片

  container.add("第一張",component1);   //第一個參數是卡片名,String類型,唯一標識此張卡片,第二個參數是要添加的組件(卡片)

  container.add("第二張",component2);

  .......

預設顯示第一張卡片(最先添加的那張)。

一般是配合事件監聽使用,發生xx事件時顯示指定的卡片。

 

CardLayout對象可指定要顯示的卡片:

  • first(container)   //顯示第一張卡片(最先放入的那張)。參數container是卡片所在的容器
  • last(container)    //最後一張
  • previous(container)    //前一張
  • next(container)   //下一張
  • show(container,"卡片名")   //特定的那張。第二個參數是添加卡片時指定的卡片名,唯一標識一張卡片

卡片是有順序的,按照添加的順序排列,最先添加的是第一張卡片。

 

以上幾個方法是CardLayout對象具有的,使用示例:

CardLayout  layout=new CardLayout();

container.setLayout(layout);

.......

layout.show(container,"第二張");   //是通過佈局管理器調用

 

 

 

 

6、BoxLayout  

BoxLayout是在一個方向上排列組件,從左往右水平排列,或者從上往下豎直排列。

構造函數:

  • BoxLayout(container, axis);   //第一個參數指定容器,第二個參數指定排列方向,

第二個參數可選的值是BoxLayout類的2個常量:BoxLayout.X_AXIS   水平排列,BoxLayout.Y_AXIS  豎直排列

 

BoxLayout的另一種使用方式:

Box  box=Box.createHorizontalBox();     //Box是一個容器,可使用靜態方法創建Box對象,自帶BoxLayout佈局管理器。

  //createHorizontalBox()創建的Box對象預設使用水平的BoxLayout佈局,createVerticalBox()預設使用豎直的BoxLayout佈局。不必再指定佈局管理器。

box.add(component);

 

 

 

如果不設置佈局管理器:

  • JFrame、JDialog、JScrollPane預設使用BorderLayout
  • JPanel(包括Applet)預設使用FlowLayout

 

 

 

Java有2種方式管理佈局:

  • 使用佈局管理器
  • 絕對定位

 

絕對定位的使用示例:

container.setLayout(null);    //不適用佈局管理器,清除預設的佈局管理器

component1.setBounds(......);     //手動為每個組件設置位置、尺寸   

component2.setBounds(.....);  

container.add(component1);

container.add(component2);

絕對定位很靈活、很簡捷,可自由放置組件,但不跨平臺。一般還是建議使用佈局管理器。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Cache緩存簡介 從Spring3開始定義Cache和CacheManager介面來統一不同的緩存技術; Cache介面為緩存的組件規範定義,包含緩存的各種操作集合; Cache介面下Spring提供了各種緩存的實現; 如RedisCache,EhCacheCache ,ConcurrentM ...
  • 正則表達式基礎以及Java中使用正則查找 定義: 正則表達式是一些用來匹配和處理文本的字元串 正則的基礎(先大致瞭解下) 1. 正則表達式的作用 1. 查找特定的信息(搜索) 2. 替換一些文本(替換) 2. 正則基礎知識 1. 元字元 . 匹配除換行符(\n)以外的任何單個字元 w 匹配字母、數字 ...
  • 6.8 包的使用 包就是一個包含有init.py文件的文件夾,所以其實我們創建包的目的就是為了用文件夾將文件/模塊組織起來 強調: 在python3中,即使包下沒有__init__.py文件,import 包仍然不會報錯,而在python2中,包下一定要有該文件,否則import 包報錯 包以及包所 ...
  • 6.21自我總結 一.爬取鬥圖網 1.摘要 2.爬取代碼 ...
  • 迴圈結構 :for 迴圈四要素: 1.初始化條件 2.迴圈條件 3.迴圈體 4.迭代條件 格式: for(初始化條件;迴圈條件;迭代條件){ 迴圈體; } 執行順序 :1 -> 2 -> 3 -> 4 ->2 -> 3 -> 4 ...... 2 說明: 1.初始化條件只執行一次 2.迴圈條件的結果 ...
  • 迴圈結構 :do-while 迴圈四要素: 1.初始化條件 2.迴圈條件 3.迴圈體 4.迭代條件 格式: 1.初始化條件 do{ 3.迴圈體 4.迭代條件 }while(2.迴圈條件); do-while和while的區別? ...
  • ``` Date: 表示特定的瞬間,精確到毫秒,通過方法設定自己所表示的時間,可以表示任意的時間 System.currentTimeMillis() :返回的當前系統時間, 1970-1-1 至今的毫秒數 SimpleDateFormat sdf = new SimpleDateFormat("y... ...
  • 1.遍歷key值 同理,可把下列代碼的d改為d.keys() notice:python2除了上述兩種方法外,還可以寫為d.iterkeys() 2.遍歷value值 同理,可把下列代碼的d改為d.values() notice:python2除了上述兩種方法外,還可以寫為d.itervalues( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...