日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3、Swing布局管理器

發(fā)布時(shí)間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3、Swing布局管理器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用 Swing 向容器添加組件時(shí),需要考慮組件的位置和大小。如果不使用布局管理器,則需要先在紙上畫好各個(gè)組件的位置并計(jì)算組件間的距離,再向容器中添加。這樣雖然能夠靈活控制組件的位置,實(shí)現(xiàn)卻非常麻煩。

為了加快開發(fā)速度,Java 提供了一些布局管理器它們可以將組件進(jìn)行統(tǒng)一管理,這樣開發(fā)人員就不需要考慮組件是否會(huì)重疊等問題。本節(jié)介紹 Swing 提供的 6 種布局類型,所有布局都實(shí)現(xiàn) LayoutManager 接口。

1、 邊框布局管理器

BorderLayout(邊框布局管理器)是 Window、JFrame 和 JDialog 的默認(rèn)布局管理器。邊框布局管理器將窗口分為 5 個(gè)區(qū)域:North、South、East、West 和 Center。其中,

  • North 表示北,將占據(jù)面板的上方;
  • Soufe 表示南,將占據(jù)面板的下方;
  • East表示東,將占據(jù)面板的右側(cè);
  • West 表示西,將占據(jù)面板的左側(cè);
  • 中間區(qū)域 Center 是在東、南、西、北都填滿后剩下的區(qū)域,

如圖 1 所示:

提示:邊框布局管理器并不要求所有區(qū)域都必須有組件,如果四周的區(qū)域(North、South、East 和 West 區(qū)域)沒有組件,則由Center 區(qū)域去補(bǔ)充。如果單個(gè)區(qū)域中添加的不只一個(gè)組件,那么后來添加的組件將覆蓋原來的組件,所以,區(qū)域中只顯示最后添加的一個(gè)組件。

BorderLayout 布局管理器的構(gòu)造方法如下所示。

  • BorderLayout():創(chuàng)建一個(gè) Border 布局,組件之間沒有間隙。
  • BorderLayout(int hgap,int vgap):創(chuàng)建一個(gè) Border 布局,其中 hgap
    表示組件之間的橫向間隔;vgap 表示組件之間的縱向間隔,單位是像素。

例 1
使用 BorderLayout 將窗口分割為 5 個(gè)區(qū)域,并在每個(gè)區(qū)域添加一個(gè)標(biāo)簽按鈕。實(shí)現(xiàn)代碼如下:

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.*; public class BorderLayoutDemo {public static void main(String[] agrs){JFrame frame=new JFrame("Java第三個(gè)GUI程序"); //創(chuàng)建Frame窗口frame.setSize(400,200);frame.setLayout(new BorderLayout()); //為Frame窗口設(shè)置布局為BorderLayoutJButton button1=new JButton ("上");JButton button2=new JButton("左");JButton button3=new JButton("中");JButton button4=new JButton("右");JButton button5=new JButton("下");frame.add(button1,BorderLayout.NORTH);frame.add(button2,BorderLayout.WEST);frame.add(button3,BorderLayout.CENTER);frame.add(button4,BorderLayout.EAST);frame.add(button5,BorderLayout.SOUTH);frame.setBounds(300,200,600,300);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} }

在該程序中分別指定了 BorderLayout 布局的東、南、西、北、中間區(qū)域中要填充的按鈕。該程序的運(yùn)行結(jié)果如圖 2 所示。

如果未指定布局管理器的 NORTH 區(qū)域,即將“frame.add(button1,BorderLayout.NORTH);”注釋掉,則 WEST、CENTER 和 EAST 3 個(gè)區(qū)域?qū)?huì)填充 NORTH 區(qū)域,如圖 3 所示。

同理,如果未指定布局管理器的 WEST 區(qū)域,即將“frame.add(button2,BorderLayout.WEST);”注釋掉,則 CENTER 區(qū)域?qū)?huì)自動(dòng)拉伸填充 WEST 區(qū)域,如圖 4 所示。

2、流式布局管理器

FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的默認(rèn)布局管理器。

FlowLayout 會(huì)將組件按照從上到下、從左到右的放置規(guī)律逐行進(jìn)行定位。與其他布局管理器不同的是,FlowLayout 布局管理器不限制它所管理組件的大小,而是允許它們有自己的最佳大小。

FlowLayout 布局管理器的構(gòu)造方法如下。

  • FlowLayout():創(chuàng)建一個(gè)布局管理器,使用默認(rèn)的居中對(duì)齊方式和默認(rèn) 5 像素的水平和垂直間隔。
  • FlowLayout(int align):創(chuàng)建一個(gè)布局管理器,使用默認(rèn) 5 像素的水平和垂直間隔。其中,align表示組件的對(duì)齊方式,對(duì)齊的值必須是 FlowLayoutLEFT、FlowLayout.RIGHT 和FlowLayout.CENTER,指定組件在這一行的位置是居左對(duì)齊、居右對(duì)齊或居中對(duì)齊。
  • FlowLayout(int align, int hgap,int vgap):創(chuàng)建一個(gè)布局管理器,其中 align表示組件的對(duì)齊方式;hgap 表示組件之間的橫向間隔;vgap 表示組件之間的縱向間隔,單位是像素。

例 2
創(chuàng)建一個(gè)窗口,設(shè)置標(biāo)題為“Java第四個(gè)GUI程序”。使用 FlowLayout 類對(duì)窗口進(jìn)行布局,向容器內(nèi)添加 9 個(gè)按鈕,并設(shè)置橫向和縱向的間隔都為 20 像素。具體實(shí)現(xiàn)代碼如下:

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.*; public class FlowLayoutDemo {public static void main(String[] agrs){JFrame jFrame=new JFrame("Java第四個(gè)GUI程序"); //創(chuàng)建Frame窗口JPanel jPanel=new JPanel(); //創(chuàng)建面板JButton btn1=new JButton("1"); //創(chuàng)建按鈕JButton btn2=new JButton("2");JButton btn3=new JButton("3");JButton btn4=new JButton("4");JButton btn5=new JButton("5");JButton btn6=new JButton("6");JButton btn7=new JButton("7");JButton btn8=new JButton("8");JButton btn9=new JButton("9");jPanel.add(btn1); //面板中添加按鈕jPanel.add(btn2);jPanel.add(btn3);jPanel.add(btn4);jPanel.add(btn5);jPanel.add(btn6);jPanel.add(btn7);jPanel.add(btn8);jPanel.add(btn9);//向JPanel添加FlowLayout布局管理器,將組件間的橫向和縱向間隙都設(shè)置為20像素jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));jPanel.setBackground(Color.gray); //設(shè)置背景色jFrame.add(jPanel); //添加面板到容器jFrame.setBounds(300,200,300,150); //設(shè)置容器的大小jFrame.setVisible(true);jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} }

上述程序向 JPanel 面板中添加了 9 個(gè)按鈕,并使用 HowLayout 布局管理器使 9 個(gè)按鈕間的橫向和縱向間隙都為 20 像素。此時(shí)這些按鈕將在容器上按照從上到下、從左到右的順序排列,如果一行剩余空間不足容納組件將會(huì)換行顯示,最終運(yùn)行結(jié)果如圖 5 所示。

3、卡片布局管理器

CardLayout(卡片布局管理器)能夠幫助用戶實(shí)現(xiàn)多個(gè)成員共享同一個(gè)顯示空間,并且一次只顯示一個(gè)容器組件的內(nèi)容。

CardLayout 布局管理器將容器分成許多層,每層的顯示空間占據(jù)整個(gè)容器的大小,但是每層只允許放置一個(gè)組件。CardLayout 的構(gòu)造方法如下。

  • CardLayout():構(gòu)造一個(gè)新布局,默認(rèn)間隔為 0。
  • CardLayout(int hgap, int vgap):創(chuàng)建布局管理器,并指定組件間的水平間隔(hgap)和垂直間隔(vgap)。

例 3
使用 CardLayout 類對(duì)容器內(nèi)的兩個(gè)面板進(jìn)行布局。其中第一個(gè)面板上包括三個(gè)按鈕,第二個(gè)面板上包括三個(gè)文本框。最后調(diào)用 CardLayout 類的 show() 方法顯示指定面板的內(nèi)容,代碼如下:

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.*; public class CardLayoutDemo { public static void main(String[] agrs){JFrame frame=new JFrame("Java第五個(gè)程序"); //創(chuàng)建Frame窗口JPanel p1=new JPanel(); //面板1JPanel p2=new JPanel(); //面板2JPanel cards=new JPanel(new CardLayout()); //卡片式布局的面板p1.add(new JButton("登錄按鈕"));p1.add(new JButton("注冊(cè)按鈕"));p1.add(new JButton("找回密碼按鈕"));p2.add(new JTextField("用戶名文本框",20));p2.add(new JTextField("密碼文本框",20));p2.add(new JTextField("驗(yàn)證碼文本框",20));cards.add(p1,"card1"); //向卡片式布局面板中添加面板1cards.add(p2,"card2"); //向卡片式布局面板中添加面板2CardLayout cl=(CardLayout)(cards.getLayout());cl.show(cards,"card1"); //調(diào)用show()方法顯示面板2frame.add(cards);frame.setBounds(300,200,400,200);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} }

上述代碼創(chuàng)建了一個(gè)卡片式布局的面板 cards,該面板包含兩個(gè)大小相同的子面板 p1 和 p2。需要注意的是,在將 p1 和 p2 添加到 cards 面板中時(shí)使用了含有兩個(gè)參數(shù)的 add() 方法,該方法的第二個(gè)參數(shù)用來標(biāo)識(shí)子面板。當(dāng)需要顯示某一個(gè)面板時(shí),只需要調(diào)用卡片式布局管理器的 show() 方法,并在參數(shù)中指定子面板所對(duì)應(yīng)的字符串即可,這里顯示的是 p1 面板,運(yùn)行效果如圖 6 所示。

如果將“cl.show(cards,"card1")”語句中的 card1 換成 card2,將顯示 p2 面板的內(nèi)容,此時(shí)運(yùn)行結(jié)果如圖 7 所示。

4、網(wǎng)格布局管理器

GridLayout(網(wǎng)格布局管理器)為組件的放置位置提供了更大的靈活性。它將區(qū)域分割成行數(shù)(rows)和列數(shù)(columns)的網(wǎng)格狀布局,組件按照由左至右、由上而下的次序排列填充到各個(gè)單元格中。

GridLayout 的構(gòu)造方法如下。

  • GridLayout(int rows,int cols):創(chuàng)建一個(gè)指定行(rows)和列(cols)的網(wǎng)格布局。布局中所有組件的大小一樣,組件之間沒有間隔。
  • GridLayout(int rows,int cols,int hgap,int vgap):創(chuàng)建一個(gè)指定行(rows)和列(cols)的網(wǎng)格布局,并且可以指定組件之間橫向(hgap)和縱向(vgap)的間隔,單位是像素。

提示:GridLayout 布局管理器總是忽略組件的最佳大小,而是根據(jù)提供的行和列進(jìn)行平分。該布局管理的所有單元格的寬度和高度都是一樣的。

例 4
使用 GridLayout 類的網(wǎng)格布局設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器。代碼的實(shí)現(xiàn)如下:

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.*; public class GridLayoutDemo {public static void main(String[] args){JFrame frame=new JFrame("GridLayou布局計(jì)算器");JPanel panel=new JPanel(); //創(chuàng)建面板//指定面板的布局為GridLayout,4行4列,間隙為5panel.setLayout(new GridLayout(4,4,5,5));panel.add(new JButton("7")); //添加按鈕panel.add(new JButton("8"));panel.add(new JButton("9"));panel.add(new JButton("/"));panel.add(new JButton("4"));panel.add(new JButton("5"));panel.add(new JButton("6"));panel.add(new JButton("*"));panel.add(new JButton("1"));panel.add(new JButton("2"));panel.add(new JButton("3"));panel.add(new JButton("-"));panel.add(new JButton("0"));panel.add(new JButton("."));panel.add(new JButton("="));panel.add(new JButton("+"));frame.add(panel); //添加面板到容器frame.setBounds(300,200,200,150);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} }

上述程序設(shè)置面板為 4 行 4 列、間隙都為 5 像素的網(wǎng)格布局,在該面板上包含 16 個(gè)按鈕,其橫向和縱向的間隙都為 5。該程序的運(yùn)行結(jié)果如圖 8 所示。

5、網(wǎng)格包布局管理器

GridBagLayout(網(wǎng)格包布局管理器)是在網(wǎng)格基礎(chǔ)上提供復(fù)雜的布局,是最靈活、 最復(fù)雜的布局管理器。

GridBagLayout 不需要組件的尺寸一致,允許組件擴(kuò)展到多行多列。每個(gè) GridBagLayout 對(duì)象都維護(hù)了一組動(dòng)態(tài)的矩形網(wǎng)格單元,每個(gè)組件占一個(gè)或多個(gè)單元,所占有的網(wǎng)格單元稱為組件的顯示區(qū)域。

GridBagLayout 所管理的每個(gè)組件都與一個(gè) GridBagConstraints 約束類的對(duì)象相關(guān)。這個(gè)約束類對(duì)象指定了組件的顯示區(qū)域在網(wǎng)格中的位置,以及在其顯示區(qū)域中應(yīng)該如何擺放組件。除了組件的約束對(duì)象,GridBagLayout 還要考慮每個(gè)組件的最小和首選尺寸,以確定組件的大小。

為了有效地利用網(wǎng)格包布局管理器,在向容器中添加組件時(shí),必須定制某些組件的相關(guān)約束對(duì)象。GridBagConstraints 對(duì)象的定制是通過下列變量實(shí)現(xiàn)的。
1. gridx 和 gridy
用來指定組件左上角在網(wǎng)格中的行和列。容器中最左邊列的 gridx 為 0,最上邊行的 gridy 為 0。這兩個(gè)變量的默認(rèn)值是 GridBagConstraints.RELATIVE,表示對(duì)應(yīng)的組件將放在前一個(gè)組件的右邊或下面。

2. gridwidth 和 gridheight
用來指定組件顯示區(qū)域所占的列數(shù)和行數(shù),以網(wǎng)格單元而不是像素為單位,默認(rèn)值為 1。

3. fill
指定組件填充網(wǎng)格的方式,可以是如下值:

  • GridBagConstraints.NONE(默認(rèn)值)、
  • GridBagConstraints.HORIZONTAL(組件橫向充滿顯示區(qū)域,但是不改變組件高度)、
  • GridBagConstraints.VERTICAL(組件縱向充滿顯示區(qū)域,但是不改變組件寬度)、
  • GridBagConstraints.BOTH(組件橫向、縱向充滿其顯示區(qū)域)。

4. ipadx 和 ipady
指定組件顯示區(qū)域的內(nèi)部填充,即在組件最小尺寸之外需要附加的像素?cái)?shù),默認(rèn)值為 0。

5. insets
指定組件顯示區(qū)域的外部填充,即組件與其顯示區(qū)域邊緣之間的空間,默認(rèn)組件沒有外部填充。

6. anchor
指定組件在顯示區(qū)域中的擺放位置。可選值有

  • GridBagConstraints.CENTER(默認(rèn)值)、

  • GridBagConstraints.NORTH、

  • GridBagConstraints.NORTHEAST、

  • GridBagConstraints.EAST、

  • GridBagConstraints.SOUTH、

  • GridBagConstraints.SOUTHEAST、

  • GridBagConstraints.WEST、

  • GridBagConstraints.SOUTHWEST 、

  • GridBagConstraints.NORTHWEST。

7. weightx 和 weighty
用來指定在容器大小改變時(shí),增加或減少的空間如何在組件間分配,默認(rèn)值為 0,即所有的組件將聚攏在容器的中心,多余的空間將放在容器邊緣與網(wǎng)格單元之間。weightx 和 weighty 的取值一般在 0.0 與 1.0 之間,數(shù)值大表明組件所在的行或者列將獲得更多的空間。

例 5
創(chuàng)建一個(gè)窗口,使用 GridBagLayout 進(jìn)行布局,實(shí)現(xiàn)一個(gè)簡(jiǎn)易的手機(jī)撥號(hào)盤。這里要注意如何控制行內(nèi)組件的顯示方式以及使用 GridBagConstraints.REMAINDER 來控制一行的結(jié)束。代碼的實(shí)現(xiàn)如下:

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.*; public class GridBagLayoutDemo {//向JFrame中添加JButton按鈕public static void makeButton(String title,JFrame frame,GridBagLayout gridBagLayout,GridBagConstraints constraints){ JButton button=new JButton(title); //創(chuàng)建Button對(duì)象gridBagLayout.setConstraints(button,constraints);frame.add(button);}public static void main(String[] agrs){JFrame frame=new JFrame("撥號(hào)盤");GridBagLayout gbaglayout=new GridBagLayout(); //創(chuàng)建GridBagLayout布局管理器GridBagConstraints constraints=new GridBagConstraints();frame.setLayout(gbaglayout); //使用GridBagLayout布局管理器constraints.fill=GridBagConstraints.BOTH; //組件填充顯示區(qū)域constraints.weightx=0.0; //恢復(fù)默認(rèn)值constraints.gridwidth = GridBagConstraints.REMAINDER; //結(jié)束行JTextField tf=new JTextField("13612345678");gbaglayout.setConstraints(tf, constraints);frame.add(tf);constraints.weightx=0.5; // 指定組件的分配區(qū)域constraints.weighty=0.2;constraints.gridwidth=1;makeButton("7",frame,gbaglayout,constraints); //調(diào)用方法,添加按鈕組件makeButton("8",frame,gbaglayout,constraints);constraints.gridwidth=GridBagConstraints.REMAINDER; //結(jié)束行makeButton("9",frame,gbaglayout,constraints);constraints.gridwidth=1; //重新設(shè)置gridwidth的值makeButton("4",frame,gbaglayout,constraints);makeButton("5",frame,gbaglayout,constraints);constraints.gridwidth=GridBagConstraints.REMAINDER;makeButton("6",frame,gbaglayout,constraints);constraints.gridwidth=1;makeButton("1",frame,gbaglayout,constraints);makeButton("2",frame,gbaglayout,constraints);constraints.gridwidth=GridBagConstraints.REMAINDER;makeButton("3",frame,gbaglayout,constraints);constraints.gridwidth=1;makeButton("返回",frame,gbaglayout,constraints);constraints.gridwidth=GridBagConstraints.REMAINDER;makeButton("撥號(hào)",frame,gbaglayout,constraints);constraints.gridwidth=1;frame.setBounds(400,400,400,400); //設(shè)置容器大小frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} }

在上述程序中創(chuàng)建了一個(gè) makeButton() 方法,用來將 JButton 組件添加到 JFrame 窗口中。

在 main() 方法中分別創(chuàng)建了 GridBagLayout 對(duì)象和 GridBagConstraints 對(duì)象,然后設(shè)置 JFrame 窗口的布局為 GridBagLayout,并設(shè)置了 GridBagConstraints 的一些屬性。

接著將 JTextField 組件添加至窗口中,并通知布局管理器的 GridBagConstraints 信息。

在接下來的代碼中,調(diào)用 makeButton() 方法向 JFrame 窗口填充按鈕,并使用 GridBagConstraints. REMAINDER 來控制結(jié)束行。

當(dāng)一行結(jié)束后,重新設(shè)置 GridBagConstraints 對(duì)象的 gridwidth 為 1。最后設(shè)置 JFrame 窗口為可見狀態(tài),程序運(yùn)行后的撥號(hào)盤效果如圖 9 所示。

6、盒布局管理器

BoxLayout(盒布局管理器)通常和 Box 容器聯(lián)合使用,Box 類有以下兩個(gè)靜態(tài)方法。

  • createHorizontalBox():返回一個(gè) Box 對(duì)象,它采用水平 BoxLayout,即 BoxLayout
    沿著水平方向放置組件,讓組件在容器內(nèi)從左到右排列
  • createVerticalBox():返回一個(gè) Box 對(duì)象,它采用垂直 BoxLayout,即 BoxLayout
    沿著垂直方向放置組件,讓組件在容器內(nèi)從上到下進(jìn)行排列

Box 還提供了用于決定組件之間間隔的靜態(tài)方法:

  • static Component createHorizontalGlue()---- 創(chuàng)建一個(gè)不可見的、可以被水平拉伸和收縮的組件
  • static Component createVerticalGlue()---- 創(chuàng)建一個(gè)不可見的、可以被垂直拉伸和收縮的組件
  • static Component createHorizontalStrut(int width)---- 創(chuàng)建一個(gè)不可見的、固定寬度的組件
  • static Component createVerticalStrut(int height) ----創(chuàng)建一個(gè)不可見的、固定高度的組件
  • static Component createRigidArea(Dimension d) ----創(chuàng)建一個(gè)不可見的、總是具有指定大小的組件

BoxLayout 類只有一個(gè)構(gòu)造方法,如下所示。

BoxLayout(Container c,int axis)

其中,參數(shù) Container 是一個(gè)容器對(duì)象,即該布局管理器在哪個(gè)容器中使用;
第二個(gè)參數(shù)為 int 型,用來決定容器上的組件水平(X_AXIS)或垂直(Y_AXIS)放置,可以使用 BoxLayout 類訪問這兩個(gè)屬性。

例 6
使用 BoxLayout 類對(duì)容器內(nèi)的 4 個(gè)按鈕進(jìn)行布局管理,使兩個(gè)按鈕為橫向排列,另外兩個(gè)按鈕為縱向排列,代碼如下:

import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.*; public class BoxLayoutDemo {public static void main(String[] agrs){JFrame frame=new JFrame("Java示例程序");Box b1=Box.createHorizontalBox(); //創(chuàng)建橫向Box容器Box b2=Box.createVerticalBox(); //創(chuàng)建縱向Box容器frame.add(b1); //將外層橫向Box添加進(jìn)窗體b1.add(Box.createVerticalStrut(200)); //添加高度為200的垂直框架b1.add(new JButton("西")); //添加按鈕1b1.add(Box.createHorizontalStrut(140)); //添加長(zhǎng)度為140的水平框架 ,西和東的距離b1.add(new JButton("東")); //添加按鈕2b1.add(Box.createHorizontalGlue()); //添加水平膠水b1.add(b2); //添加嵌套的縱向Box容器//添加寬度為100,高度為20的固定區(qū)域 b2.add(Box.createRigidArea(new Dimension(100,20))); b2.add(new JButton("北")); //添加按鈕3b2.add(Box.createVerticalGlue()); //添加垂直組件b2.add(new JButton("南")); //添加按鈕4b2.add(Box.createVerticalStrut(40)); //添加長(zhǎng)度為40的垂直框架//設(shè)置窗口的關(guān)閉動(dòng)作、標(biāo)題、大小位置以及可見性等 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100,100,400,200); frame.setVisible(true); } }

在程序中創(chuàng)建了 4 個(gè) JButton 按鈕和兩個(gè) Box 容器(橫向 Box 容器和縱向 Box 容器),并將前兩個(gè) JButton 按鈕添加到橫向 Box 容器中,將后兩個(gè) JButton 容器添加到縱向 Box 容器中。程序的運(yùn)行結(jié)果如圖 10 所示。

提示:使用盒式布局可以像使用流式布局一樣簡(jiǎn)單地將組件安排在一個(gè)容器內(nèi)。包含盒式布局的容器可以嵌套使用,最終達(dá)到類似于無序網(wǎng)格布局那樣的效果,卻不像使用無序網(wǎng)格布局那樣麻煩。

總結(jié)

以上是生活随笔為你收集整理的3、Swing布局管理器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费观看已满十八岁 | 亚洲视频免费 | 国产精品网友自拍 | 黑人操亚洲女 | 亚洲国产日韩欧美 | 日本免费一区视频 | 欧美影院久久 | 国产一级二级三级在线观看 | 日本最黄网站 | 无码精品黑人一区二区三区 | 色哟哟在线观看视频 | 黑人极品videos精品欧美裸 | 亚洲精品乱码久久久久久9色 | 看a网站| 欧美日韩中文字幕一区 | hs网站在线观看 | 午夜少妇视频 | 亚洲伊人网站 | 亚洲第一二区 | 少妇aa | 国产成人午夜精华液 | 久久久久久一区二区三区 | 国产福利不卡 | 亚洲制服丝袜在线播放 | 久久久精品人妻一区二区三区 | 久久精品国产网红主播 | 五月激情开心网 | 欧美啪啪一区二区 | 国产chinesehd天美传媒 | 日韩欧美中字 | 成人一区二区视频 | 毛利兰被扒开腿做同人漫画 | 成年人黄国产 | 久久久999国产 | 自拍偷拍欧美激情 | 99精品人妻国产毛片 | 今天最新中文字幕mv高清 | 精品国产一区二区三区噜噜噜 | 男人插入女人下面的视频 | 国产精品主播在线 | 激情aaa| 99色这里只有精品 | 欧美色老头 | 免费国产羞羞网站视频 | 久久久精品一区二区 | 精品视频久久久久久 | 国产乱码精品一区二区三区不卡 | 欧美日韩成人一区二区 | 国产日韩欧美一二三区 | 欧美日b片 | 日本h视频在线观看 | 精品日韩欧美 | 少妇性bbb搡bbb爽爽爽欧美 | 在线观看av国产一区二区 | 曰批女人视频在线观看 | 97视频在线观看免费高清完整版在线观看 | 草久久久久 | 玉足调教丨vk24分钟 | 中国精品毛片 | 高跟肉丝丝袜呻吟啪啪网站av | 亚洲网址在线 | 国产av剧情一区 | 三级男人添奶爽爽爽视频 | 国产成人精品一区在线播放 | 91精品国产手机 | 天堂网2014av| 91精品一区二区 | 在线观看国产福利 | 性欧美大战久久久久久久免费观看 | 午夜爱| 一卡二卡三卡四卡 | 亚洲激情网 | 欧美色图1| 超碰日日夜夜 | 日韩欧美成人一区二区 | 一区二区中文字幕在线观看 | 欧美激情 一区 | 日本污污网站 | 国产91在线亚洲 | 草久影院 | 91精品国产综合久久精品图片 | 91性高潮久久久久久久久 | 国产精品国产精品国产专区不片 | 一级大片免费 | 欧美极品一区二区三区 | 久久网站视频 | 成人免费视频国产 | 亚洲a黄| 亚洲成人精品一区二区三区 | 一区在线观看 | 激情综合小说 | 毛片无遮挡高清免费观看 | 日本一二三区视频在线 | 免费国产一区 | 久久久精品视频一区 | 亚洲无码一区二区三区 | 欧美日韩亚洲高清 | 18禁男女爽爽爽午夜网站免费 | 精品一区二区三区在线播放 |