欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Swing GridBagLayout網(wǎng)格袋布局的實(shí)現(xiàn)

 更新時(shí)間:2019年12月05日 09:30:08   作者:xietansheng  
這篇文章主要介紹了Java Swing GridBagLayout網(wǎng)格袋布局的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 布局: GridBagLayout

官方JavaDocsApi: java.awt.GridBagLayout

GridBagLayout,網(wǎng)格袋布局管理器。它不要求組件的大小相同便可以將組件垂直、水平或沿它們的基線對(duì)齊。每個(gè) GridBagLayout 對(duì)象維持一個(gè)動(dòng)態(tài)的矩形單元格(動(dòng)態(tài)計(jì)算出單個(gè)單元格的大小),每個(gè)組件占用一個(gè)或多個(gè)的單元格,該單元格被稱為 顯示區(qū)域。每個(gè)組件顯示區(qū)域按 從左到右,從上到下,依次排列。

2. 約束: GridBagConstraints

GridBagConstraints,封裝了若干對(duì)組件的約束屬性,每個(gè)由 GridBagLayout 管理的 組件都關(guān)聯(lián)一個(gè)該約束實(shí)例,以指定 組件所在顯示區(qū)域 的具體放置位置,以及 組件在其顯示區(qū)域中 的對(duì)齊方式。

給組件添加約束: GridBagLayout.setConstraints(Component comp, GridBagConstraints c)

PS: 要理解 組件(所在)顯示區(qū)域(一個(gè)或多個(gè)單元格組成) 和 組件在其顯示區(qū)域中的對(duì)齊方式 這兩個(gè)不同的概念。

3. 屬性: GridBagConstraints 的屬性

下面屬性描述中的相關(guān)大寫字母常量均定義在GridBagConstraints類中。

3.1 顯示區(qū)域 約束屬性

組件的顯示區(qū)域相關(guān)約束屬性,直接作用在組件所在顯示區(qū)域上。

(1)gridx, gridy

組件顯示區(qū)域 開(kāi)始顯示的位置(單元格坐標(biāo)),容器左上角第一個(gè)單元格位置為 (0, 0),默認(rèn)值為RELATIVE,表示放置在 “上一個(gè)組件”(所在行列最后添加的一個(gè)組件)的 “后面”。

(2)gridwidth, gridheight

組件顯示區(qū)域 水平/豎直方向 所占單元格的個(gè)數(shù),默認(rèn)值為 1,如要占多行/列,需整體結(jié)果有足夠的行/列。有如下兩個(gè)常量特殊值可選:

  • REMAINDER: 占完所在行/列余下所有單元格(該值可實(shí)現(xiàn) 換行 作用);
  • RELATIVE: 占到所在行/列余下的倒數(shù)第二個(gè)單元格(使用該值,所在行/列的最后一個(gè)單元格需要“合理”安排組件,并手動(dòng)換行)。

設(shè)置該值不能導(dǎo)致 “前面” 或 “后面” 單元格有留空白,否則可能無(wú)效。

(3)weightx, weighty

如何 分布額外空間(單元格區(qū)域外,容器邊緣內(nèi) 的間隔),當(dāng)指定行/列中的其中 任意一個(gè) 組件的權(quán)重(大于0),則該行/列將(和其他行/列按權(quán)重比例)分配額外的水平/豎直空間。當(dāng)權(quán)重為 0(默認(rèn)值)時(shí),則 整個(gè)單元格區(qū)域 居中于容器中心。

PS: 如果調(diào)用了java.awt.Window.pack()方法,該值無(wú)效,因?yàn)?pack 后已無(wú)額外的空間。

3.2 組件 約束屬性

組件相關(guān)約束屬性,直接作用在組件上。

(1)fill

當(dāng) 顯示區(qū)域 大小大于 組件 所需要的大小時(shí),組件 在其 顯示區(qū)域內(nèi) 的填充方式??赡艿闹等缦?

  • NONE: (默認(rèn))不調(diào)整組件大小;
  • HORIZONTAL: 加寬組件,使它在水平方向上填滿其顯示區(qū)域,但是不改變高度;
  • VERTICAL: 加高組件,使它在垂直方向上填滿其顯示區(qū)域,但是不改變寬度;
  • BOTH: 使組件完全填滿其顯示區(qū)域。

(2)anchor

組件 在 顯示區(qū)域內(nèi) 的位置(對(duì)齊方式),可能有如下三種值:

絕對(duì)值 相對(duì)于方向的值 相對(duì)于基線的值
NORTH PAGE_START BASELINE
SOUTH PAGE_END BASELINE_LEADING
WEST LINE_START BASELINE_TRAILING
EAST LINE_END ABOVE_BASELINE
NORTHWEST FIRST_LINE_START ABOVE_BASELINE_LEADING
NORTHEAST FIRST_LINE_END ABOVE_BASELINE_TRAILING
SOUTHWEST LAST_LINE_START BELOW_BASELINE
SOUTHEAST LAST_LINE_END BELOW_BASELINE_LEADING
CENTER(默認(rèn)值) BELOW_BASELINE_TRAILING

(3)ipadx, ipady

組件的內(nèi)部填充(可看做是 組件的內(nèi)邊距),即對(duì)組件最小大小的添加量。組件的寬度至少為其最小寬度/高度加上 ipadx/ipady 像素。

(4)insets

組件的外部填充(可看做是 組件的外邊距,也可看做是 顯示區(qū)域 的內(nèi)邊距),即 組件 與其 顯示區(qū)域邊緣 之間間距的最小量。

PS: 上面各屬性值之間,以及其他因素,有可能存在沖突或不兼容,不一定設(shè)置了即有效,建議多做實(shí)驗(yàn),多寫測(cè)試Demo去嘗試。

4. 案例: GridBagLayout使用實(shí)例

先展示效果,如下圖所示:

各按鈕約束參數(shù):

  • Button01, Button02, Button03:默認(rèn)
  • Button04:gridwidth = REMAINDER、fill = BOTH
  • Button05:gridwidth = REMAINDER、fill = BOTH
  • Button06:gridwidth = RELATIVE、fill = BOTH
  • Button07:gridwidth = REMAINDER
  • Button08:gridheight = 2、fill = BOTH
  • Button09:gridwidth = REMAINDER、fill = BOTH
  • Button10:gridwidth = REMAINDER、fill = BOTH

代碼實(shí)現(xiàn):

package com.xiets.swing;

import javax.swing.*;
import java.awt.*;

public class Main {

 public static void main(String[] args) {
  JFrame jf = new JFrame("測(cè)試窗口");
  jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

  GridBagLayout gridBag = new GridBagLayout(); // 布局管理器
  GridBagConstraints c = null;     // 約束

  JPanel panel = new JPanel(gridBag);

  JButton btn01 = new JButton("Button01");
  JButton btn02 = new JButton("Button02");
  JButton btn03 = new JButton("Button03");
  JButton btn04 = new JButton("Button04");
  JButton btn05 = new JButton("Button05");
  JButton btn06 = new JButton("Button06");
  JButton btn07 = new JButton("Button07");
  JButton btn08 = new JButton("Button08");
  JButton btn09 = new JButton("Button09");
  JButton btn10 = new JButton("Button10");

  /* 添加 組件 和 約束 到 布局管理器 */
  // Button01
  c = new GridBagConstraints();
  gridBag.addLayoutComponent(btn01, c); // 內(nèi)部使用的僅是 c 的副本

  // Button02
  c = new GridBagConstraints();
  gridBag.addLayoutComponent(btn02, c);

  // Button03
  c = new GridBagConstraints();
  gridBag.addLayoutComponent(btn03, c);

  // Button04 顯示區(qū)域占滿當(dāng)前行剩余空間(換行),組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.REMAINDER;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn04, c);

  // Button05 顯示區(qū)域獨(dú)占一行(換行),組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.REMAINDER;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn05, c);

  // Button06 顯示區(qū)域占到當(dāng)前尾倒車第二個(gè)單元格(下一個(gè)組件后需要手動(dòng)換行),組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.RELATIVE;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn06, c);

  // Button07 放置在當(dāng)前行最后一個(gè)單元格(換行)
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.REMAINDER;
  gridBag.addLayoutComponent(btn07, c);

  // Button08 顯示區(qū)域占兩列,組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridheight = 2;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn08, c);

  // Button09 顯示區(qū)域占滿當(dāng)前行剩余空間(換行),組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.REMAINDER;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn09, c);

  // Button10 顯示區(qū)域占滿當(dāng)前行剩余空間(換行),組件填充顯示區(qū)域
  c = new GridBagConstraints();
  c.gridwidth = GridBagConstraints.REMAINDER;
  c.fill = GridBagConstraints.BOTH;
  gridBag.addLayoutComponent(btn10, c);

  /* 添加 組件 到 內(nèi)容面板 */
  panel.add(btn01);
  panel.add(btn02);
  panel.add(btn03);
  panel.add(btn04);
  panel.add(btn05);
  panel.add(btn06);
  panel.add(btn07);
  panel.add(btn08);
  panel.add(btn09);
  panel.add(btn10);

  jf.setContentPane(panel);
  jf.pack();
  jf.setLocationRelativeTo(null);
  jf.setVisible(true);
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中@Configuration使用場(chǎng)景

    java中@Configuration使用場(chǎng)景

    本文主要介紹了java中@Configuration使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Java 比較字符串實(shí)例詳解

    Java 比較字符串實(shí)例詳解

    這篇文章主要介紹了 Java 比較字符串實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • mybatisPlus如何使用MetaObjectHandler對(duì)字段進(jìn)行更新

    mybatisPlus如何使用MetaObjectHandler對(duì)字段進(jìn)行更新

    這篇文章主要介紹了mybatisPlus如何使用MetaObjectHandler對(duì)字段進(jìn)行更新問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java wait和notify虛假喚醒原理

    Java wait和notify虛假喚醒原理

    這篇文章主要介紹了Java wait和notify虛假喚醒,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Springboot+redis+Interceptor+自定義annotation實(shí)現(xiàn)接口自動(dòng)冪等

    Springboot+redis+Interceptor+自定義annotation實(shí)現(xiàn)接口自動(dòng)冪等

    本篇文章給大家介紹了使用springboot和攔截器、redis來(lái)優(yōu)雅的實(shí)現(xiàn)接口冪等,對(duì)于冪等在實(shí)際的開(kāi)發(fā)過(guò)程中是十分重要的,因?yàn)橐粋€(gè)接口可能會(huì)被無(wú)數(shù)的客戶端調(diào)用,如何保證其不影響后臺(tái)的業(yè)務(wù)處理,如何保證其只影響數(shù)據(jù)一次是非常重要的,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • 淺談Map集合中g(shù)et不存在的key值,會(huì)拋出異常嗎?

    淺談Map集合中g(shù)et不存在的key值,會(huì)拋出異常嗎?

    這篇文章主要介紹了淺談Map集合中g(shù)et不存在的key值,會(huì)拋出異常嗎?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    這篇文章主要介紹了ActiveMQ消息簽收機(jī)制代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • javax.servlet不存在的解決辦法

    javax.servlet不存在的解決辦法

    今天在關(guān)于servlet的編譯中出現(xiàn)了一下小小的錯(cuò)誤,發(fā)現(xiàn)javax.servlet不存在,本文就介紹一下解決方法,感興趣的可以了解一下
    2021-07-07
  • java實(shí)現(xiàn)批量下載 多文件打包成zip格式下載

    java實(shí)現(xiàn)批量下載 多文件打包成zip格式下載

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)批量下載、將多文件打包成zip格式下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java基礎(chǔ)之三大控制流程結(jié)構(gòu)

    Java基礎(chǔ)之三大控制流程結(jié)構(gòu)

    這篇文章主要介紹了Java基礎(chǔ)之三大控制流程結(jié)構(gòu),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論