最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年12月05日 09:30:08   作者:xietansheng  
這篇文章主要介紹了Java Swing GridBagLayout網(wǎng)格袋布局的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ū)域 開始顯示的位置(單元格坐標(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)致 “前面” 或 “后面” 單元格有留空白,否則可能無效。

(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()方法,該值無效,因?yàn)?pack 后已無額外的空間。

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兩個(gè)List<T> 求交集,差集,并集,去重后的并集

    Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集

    本文主要介紹了Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot實(shí)現(xiàn)文件下載功能的方式分享

    SpringBoot實(shí)現(xiàn)文件下載功能的方式分享

    這篇文章主要為大家詳細(xì)介紹了SpringBoot這哪個(gè)實(shí)現(xiàn)文件下載功能的幾種方式,文中的實(shí)現(xiàn)方法簡(jiǎn)介易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Spring Boot RestTemplate提交表單數(shù)據(jù)的三種方法

    Spring Boot RestTemplate提交表單數(shù)據(jù)的三種方法

    本篇文章主要介紹了Spring Boot RestTemplate提交表單數(shù)據(jù)的三種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java序列化中子類、父類構(gòu)造函數(shù)問題實(shí)例分析

    Java序列化中子類、父類構(gòu)造函數(shù)問題實(shí)例分析

    這篇文章主要介紹了Java序列化中子類、父類構(gòu)造函數(shù)問題,結(jié)合實(shí)例形式分析了java父類與子類構(gòu)造函數(shù)中序列化接口調(diào)用相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Spring的構(gòu)造器注入全過程

    Spring的構(gòu)造器注入全過程

    這篇文章主要介紹了Spring的構(gòu)造器注入全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • MyBatis中 #{} 和 ${} 的區(qū)別小結(jié)

    MyBatis中 #{} 和 ${} 的區(qū)別小結(jié)

    MyBatis中#{}和${}是兩種占位符,本文就來介紹一下MyBatis中 #{} 和 ${} 的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目

    如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目

    這篇文章主要介紹了如何使用IDEA2022.1?創(chuàng)建Spring?Boot項(xiàng)目,大家在使用idea開發(fā)工具時(shí)發(fā)現(xiàn)給以往的版本略微的不同,細(xì)心的小編在此記錄下,需要的朋友可以參考下
    2022-08-08
  • 關(guān)于網(wǎng)頁(yè)報(bào)錯(cuò)404原因以及解決方法

    關(guān)于網(wǎng)頁(yè)報(bào)錯(cuò)404原因以及解決方法

    404錯(cuò)誤是網(wǎng)站常見的錯(cuò)誤之一,出現(xiàn)的原因很多,解決方法也有很多種,這篇文章主要給大家介紹了關(guān)于網(wǎng)頁(yè)報(bào)錯(cuò)404原因以及解決方法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • java小數(shù)位的例子

    java小數(shù)位的例子

    在java中要保留數(shù)字小數(shù)位我們有常用的四種方法,分別為:四舍五入,DecimalFormat,format,String .format與struts標(biāo)簽操作實(shí)現(xiàn),下面給出例子
    2013-11-11
  • Java中ThreadLocal?導(dǎo)致內(nèi)存?OOM?的原因分析

    Java中ThreadLocal?導(dǎo)致內(nèi)存?OOM?的原因分析

    這篇文章主要介紹了Java中ThreadLocal導(dǎo)致內(nèi)存OOM的原因分析,文章基于Java的相關(guān)內(nèi)容展開ThreadLocal導(dǎo)致內(nèi)存OOM的原因分析,需要的小伙v阿布可以參考一下
    2022-05-05

最新評(píng)論

那曲县| 通许县| 西昌市| 从江县| 莎车县| 马鞍山市| 开原市| 若尔盖县| 寿光市| 南陵县| 婺源县| 太保市| 常德市| 泰兴市| 石首市| 饶河县| 会宁县| 高台县| 建阳市| 岫岩| 高淳县| 乌拉特中旗| 手机| 永寿县| 公主岭市| 罗定市| 汉阴县| 丹江口市| 明溪县| 延长县| 锡林郭勒盟| 邹平县| 中牟县| 油尖旺区| 武陟县| 靖西县| 廊坊市| 凤凰县| 鄄城县| 长子县| 海口市|