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

一篇文章帶你了解Java容器,面板及四大布局管理器應(yīng)用

 更新時(shí)間:2021年08月03日 10:56:06   作者:灰小猿  
這篇文章主要介紹了JAVA布局管理器與面板組合代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

什么是容器?

在Java的GUI界面設(shè)計(jì)中,關(guān)于容器的理解,從字面意思我們就可以認(rèn)為它是存放控件的地方,而這個(gè)地方依托在窗體之上,常用的容器是container。

而關(guān)于container容器我們應(yīng)該有這樣的認(rèn)識(shí):Swing組件中的窗體通常是與容器相關(guān)聯(lián)的,所以在一般情況下,建立完JFrame窗體后,我們會(huì)調(diào)用getContentPane()方法將窗體轉(zhuǎn)換為容器,之后再在該容器中添加控件或布局管理器。關(guān)于控件在container容器中添加和刪除用以下兩種方法:

Container.add(); //為容器添加控件

Container.remove(); //為容器添加控件

實(shí)例程序如下:

public class ConJFrame extends JFrame{
	public ConJFrame() {
		setTitle("Container容器");
		setSize(400,400);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************在容器中添加一個(gè)標(biāo)簽******************/
		JLabel jLabel = new JLabel("這是一個(gè)容器");
		jLabel.setBounds(100, 100, 200, 50);
		container.add(jLabel);	//將控件加入到容器
		/****************在容器中添加一個(gè)按鈕后移除************/
		JButton jButton = new JButton("這是一個(gè)按鈕");
		jButton.setBounds(100, 200, 200, 50);
		container.add(jButton);		//將按鈕加入到容器
		container.remove(jButton);		//將按鈕從容器中移除
		setLayout(null);	//清空布局管理器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ConJFrame();
	}
}

效果如下:

什么是面板?

關(guān)于面板的解釋,你可以認(rèn)為它也是一個(gè)容器,但是這個(gè)容器必須添加在其他的容器中,在Swing中常用的面板有兩種,分別是JPanel面板和JScrollPane面板,下面分別對(duì)這兩種面板的用途進(jìn)行介紹:

JPanel面板

在JPanel面板中我們可以添加一些組件來(lái)對(duì)該面板中的內(nèi)容進(jìn)行布局,之所以它具備這樣的功能,是因?yàn)镴Panel面板同樣也繼承了java.awt.Container類,因此它同樣是具有Container容器的功能,

但是與Container容器不同的就是:Container容器不需要添加在其他容器中,而JPanel面板必須添加在其他容器中。

因此我們可以理解為JPanel面板其實(shí)就是對(duì)一個(gè)大的容器的劃分,將Container容器根據(jù)一定的規(guī)則(布局管理)劃分成了一個(gè)個(gè)小的面板。因此JPanel面板的使用一般是與布局管理器相結(jié)合的,

JScrollPane面板

先來(lái)看一種在界面設(shè)計(jì)時(shí)常見(jiàn)的問(wèn)題:在一個(gè)較小的界面中顯示一個(gè)較大的內(nèi)容的情況,對(duì)于這種情況,我們常用的方法就是將較小的容器設(shè)置為JScrollPane面板,原因是因?yàn)镴ScrollPane面板是自帶滾動(dòng)條的,并且同時(shí)它也是一種容器,這也是在做相關(guān)開(kāi)發(fā)時(shí)我們?cè)O(shè)置滾動(dòng)條常用的一種方法。

使用JScrollPane面板時(shí)需要注意以下兩個(gè)問(wèn)題:

  • JScrollPane面板中只能布置一個(gè)控件,
  • JScrollPane面板不能使用布局管理器

因此如果想要在JScrollPane面板中顯示多個(gè)控件,就需要首先將控件布局在JPanel面板中,之后將JPanel面板作為一個(gè)整體組件添加到JScrollPane面板中,

通過(guò)下面程序?qū)ScrollPane面板進(jìn)行實(shí)踐:

以下程序是在JScrollPane面板中加入一個(gè)文本框,實(shí)現(xiàn)一個(gè)帶有滾動(dòng)條的文本框。

public class JScrollPaneClass extends JFrame{
	public JScrollPaneClass() {
		setTitle("JScrollPane面板");
		setSize(400,400);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************在JScrollPane面板中添加一個(gè)文本框******************/
		JTextArea jTextArea = new JTextArea();
		JScrollPane jsp = new JScrollPane(jTextArea);
		container.add(jsp);		//將JScrollPane面板加入容器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new JScrollPaneClass();
	}
}

效果如下:

什么是布局管理器?

關(guān)于布局管理器,在Swing中,每個(gè)組件都有一個(gè)具體的位置和大小,而在容器中真正去擺放這些組件時(shí)其實(shí)是很難判斷其具體位置和大小的,布局管理器就提供了一種對(duì)swing組件的排版方式,因此使用布局管理器就可以很有效的處理整個(gè)窗體中組件的布局方式,Swing提供的常用的布局管理器有四種:絕對(duì)布局管理器、流布局管理器、邊界布局管理器、網(wǎng)格布局管理器,接下來(lái)會(huì)對(duì)這四種布局管理器進(jìn)行探討。

絕對(duì)布局管理器

除了網(wǎng)格布局管理器、流布局管理器、邊界布局管理器這三種布局方式以外,還有一種較為不同的布局方式就是絕對(duì)布局,所謂絕對(duì)布局,就是按照一定的坐標(biāo)數(shù)據(jù)將組件的坐標(biāo)和大小硬性的設(shè)置在窗體上。

使用絕對(duì)布局時(shí)首先有一點(diǎn)需要注意:

就是要先取消默認(rèn)布局管理器,方法為:

setLayout(null); //清空布局管理器,即取消原來(lái)的邊界布局管理器

之后再使用以下方法對(duì)組件進(jìn)行絕對(duì)定位:

setBounds(x,y,width,height);

//其中x表示組件基于容器左上角的橫坐標(biāo)、y表示縱坐標(biāo),width表示組件的寬,height表示組件的高

請(qǐng)看下面實(shí)例:在容器中采用絕對(duì)布局添加三個(gè)控件,并賦于橫縱坐標(biāo)和按鈕的長(zhǎng)寬:

public class AbsolutelyLayoutClass extends JFrame{
	public AbsolutelyLayoutClass() {
		setTitle("絕對(duì)布局管理器");
		setSize(600,300);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************使用絕對(duì)布局管理器布局組件******************/
		JButton jb1 = new JButton("這是絕對(duì)布局1");
		jb1.setBounds(200, 50, 200, 30);	//為組件設(shè)置絕對(duì)坐標(biāo)
		container.add(jb1);		//將組件添加到容器
		JButton jb2 = new JButton("這是絕對(duì)布局2");
		jb2.setBounds(200, 100, 200, 30);	//為組件設(shè)置絕對(duì)坐標(biāo)
		container.add(jb2);	//將組件添加到容器
		JButton jb3 = new JButton("這是絕對(duì)布局3");
		jb3.setBounds(200, 150, 200, 30);	//為組件設(shè)置絕對(duì)坐標(biāo)
		container.add(jb3);	//將組件添加到容器
		setLayout(null);	//清空布局管理器,即取消原來(lái)的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new AbsolutelyLayoutClass();
	}
}

效果如下:

在使用絕對(duì)布局管理器時(shí)值得注意的就是:在使用絕對(duì)布局之前要調(diào)用setLayout(null)方法來(lái)告知編輯器,這里將不再使用默認(rèn)的布局管理器。

流布局管理器

流布局管理器(FlowLayout)具有的特點(diǎn)就是:在其中的組件可以像“流”一樣按照從左到右的順序依次的排列,直到該行排列完畢后再?gòu)南乱恍欣^續(xù)排列。在默認(rèn)的情況下,組將在流布局管理器中都是以居中排列的,當(dāng)然排列的順序是可以改變的,

FlowLayout類中的構(gòu)造函數(shù)中有如下三種:

  • Public FlowLayout();
  • Public FlowLayout(int alignment);
  • Public FlowLayout(int alignment, int horizGap, int vertGap);

以上構(gòu)造函數(shù)中的alignment參數(shù)表示組件在采用流布局管理器后在每一行的具體排放位置??梢再x的值為:

  • FlowLayout.LEFT = 0;
  • FlowLayout.CENTER = 1;
  • FlowLayout.RIGHT = 2;

以上三個(gè)值被賦予以后,表示組件在流布局管理器中每一行的擺放位置和擺放順序,如當(dāng)alignment=0時(shí),流布局管理器中的組件按照從左到右的順序排列,當(dāng)alignment=1時(shí),流布局管理器中的組件按照從中間向兩端的順序排列。

在Public FlowLayout(int alignment, int horizGap, int vertGap);構(gòu)造方法中,后面的參數(shù)horizGap和vertGap分別表示以像素為單位指定組件之間的水平間隔和垂直間隔。

關(guān)于流布局管理器的具體使用可以參考如下實(shí)例:

在該窗體中按照流布局管理器添加10個(gè)按鈕

public class FlowLayoutClass extends JFrame{
	public FlowLayoutClass() {
		setTitle("流布局管理器");
		setSize(600,300);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************使用流布局管理器布局組件******************/
		//將容器設(shè)置為從左向右排列、組件水平間隔和垂直間隔分別為10的流布局管理器
		container.setLayout(new FlowLayout(0,10,10));	
		for (int i = 0; i < 10; i++) {
			container.add(new JButton("流布局按鈕" + i));
		}
		//setLayout(null);	//清空布局管理器,即取消原來(lái)的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		new FlowLayoutClass();
	}
}

效果如下:

在我們拉動(dòng)窗體大小變化時(shí),其中的組件也會(huì)按照流布局的特點(diǎn)發(fā)生改變,這就驗(yàn)證了流布局管理器中的組件按照從左到右的順序依次擺放,直到該行占滿后再?gòu)南乱恍虚_(kāi)始擺放。

邊界布局管理

在默認(rèn)不指定窗體布局的情況下,Swing組件的布局模式就是邊界布局(BorderLayout),該布局管理器的特征就是組件會(huì)按照一定要求布滿整個(gè)容器的邊界,

邊界布局管理器可以將容器劃分成東、南、西、北、中五個(gè)區(qū)域,在容器中添加組件時(shí),我們可以設(shè)置組將放入到哪一個(gè)區(qū)域中,關(guān)于區(qū)域的控制可以使用BorderLayout類中的成員方法來(lái)確定,關(guān)于這些成員變量的具體含義可以參考下表:

成員變量

含義

BorderLayout.NORTH

在容器中添加組件時(shí),組件置于頂端

BorderLayout.SOUTH

在容器中添加組件時(shí),組件置于底端

BorderLayout.EAST

在容器中添加組件時(shí),組件置于右端

BorderLayout.WEST

在容器中添加組件時(shí),組件置于左端

BorderLayout.CENTER

在容器中添加組件時(shí),組件置于中間開(kāi)始填充,直到與其他組件邊界連接

關(guān)于邊界布局管理器的具體使用可以參考如下實(shí)例,將容器劃分為東、南、西、北、中五個(gè)區(qū)域,并在各區(qū)域中添加組件。

public class BorderLayoutClass extends JFrame{
	public BorderLayoutClass() {
		setTitle("邊界布局管理器");
		setSize(600,300);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************使用邊界布局管理器布局組件******************/
		//將容器設(shè)置為邊界布局管理器
		container.setLayout(new BorderLayout());
		container.add(new JButton("我是北部區(qū)域"),BorderLayout.NORTH);	//將按鈕加入到北部區(qū)域
		container.add(new JButton("我是西部區(qū)域"),BorderLayout.WEST);		//將按鈕加入到西部區(qū)域
		container.add(new JButton("我是中部區(qū)域"),BorderLayout.CENTER);	//將按鈕加入到中部區(qū)域
		container.add(new JButton("我是東部區(qū)域"),BorderLayout.EAST);		//將按鈕加入到東部區(qū)域
		container.add(new JButton("我是南部區(qū)域"),BorderLayout.SOUTH);	//將按鈕加入到南部區(qū)域
		//setLayout(null);	//清空布局管理器,即取消原來(lái)的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new BorderLayoutClass();
	}
}

效果如下:

在該方法中直接在add()方法中新建組件,并且在后方加入表示組件位置的參數(shù)。

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

網(wǎng)格布局管理器(GridLayout)從字面意思就可以理解,就是將容器按照行列劃分成特定的網(wǎng)格,在網(wǎng)格布局管理器中每一個(gè)網(wǎng)格的大小都是一樣的,并且網(wǎng)格中格子的個(gè)數(shù)是由劃分的行和列決定的,如一個(gè)兩行兩列的網(wǎng)格布局,將會(huì)劃分成四個(gè)大小相同的網(wǎng)格。

在網(wǎng)格布局中的組將會(huì)按照從左到右、從上到下的順序加入到網(wǎng)格中,而且加入到網(wǎng)格中的組件都會(huì)將網(wǎng)格填滿,同時(shí)改變窗體的大小,網(wǎng)格的大小也會(huì)隨之改變。

網(wǎng)格布局中常用的布局管理器有如下兩種:

  • Public GridLayout(int rows, int columns);
  • Public GridLayout(int rows, int columns, int horizGap, int vertGap);

其中的rows和columns分別表示網(wǎng)格布局的行和列,這兩個(gè)參數(shù)中只有一個(gè)可以為0,表示為一行或一列可以擺放多個(gè)組件,horizGap和vertGap兩個(gè)參數(shù)和流布局管理器中的一樣,只不過(guò)在流布局管理器中表示的是組件之間的水平和垂直間距,而在網(wǎng)格布局管理器中表示網(wǎng)格之間的水平和垂直間距,

關(guān)于網(wǎng)格布局管理器的具體使用參考如下實(shí)例,

將容器設(shè)置為4行5列的網(wǎng)格,網(wǎng)格之間的水平和垂直間距為10像素。并在其中加入20個(gè)按鈕

public class GridLayoutClass extends JFrame{
	public GridLayoutClass() {
		setTitle("網(wǎng)格布局管理器");
		setSize(600,300);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************使用網(wǎng)格布局管理器布局組件******************/
		//將容器設(shè)置為4行5列網(wǎng)格布局管理器,網(wǎng)格之間的水平和垂直間距都為10像素
		container.setLayout(new GridLayout(4,5,10,10));
		for (int i = 0; i < 20; i++) {
			container.add(new JButton("網(wǎng)格" + i));
		}
		//setLayout(null);	//清空布局管理器,即取消原來(lái)的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見(jiàn)
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new GridLayoutClass();
	}
}

效果如下

在拉動(dòng)窗體改變大小時(shí),網(wǎng)格的大小也會(huì)隨之改變。

容器、面板、布局管理器之間的關(guān)系

關(guān)于Swing窗體開(kāi)發(fā)中的容器、面板、布局管理器之間有如下的關(guān)系:

  • 面板應(yīng)該設(shè)置在容器之中,
  • 布局管理器可以設(shè)置在容器或面板之中,
  • 布局管理器中還可以嵌套面板,在該面板中還可以再添加布局管理器,
  • 只有深刻的理解了這三者之間的關(guān)系,才能在窗體開(kāi)發(fā)中很好的結(jié)合使用。

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • java根據(jù)本地IP獲取mac地址的方法

    java根據(jù)本地IP獲取mac地址的方法

    這篇文章主要為大家詳細(xì)介紹了java根據(jù)本地IP獲取mac地址的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中

    詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中

    本篇介紹了Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    這篇文章主要為大家介紹了Kotlin內(nèi)存陷阱inline使用技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java獲取配置文件的值過(guò)程解析

    Java獲取配置文件的值過(guò)程解析

    這篇文章主要介紹了java獲取配置文件的值過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot事件監(jiān)聽(tīng)器@EventListener的實(shí)現(xiàn)

    SpringBoot事件監(jiān)聽(tīng)器@EventListener的實(shí)現(xiàn)

    @EventListener注解用于處理應(yīng)用程序事件,提供了一種方便的方式來(lái)監(jiān)聽(tīng)和響應(yīng)各種事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Spring Security permitAll()不允許匿名訪問(wèn)的操作

    Spring Security permitAll()不允許匿名訪問(wèn)的操作

    這篇文章主要介紹了Spring Security permitAll()不允許匿名訪問(wèn)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 介紹java中Pair(配對(duì))

    介紹java中Pair(配對(duì))

    這篇文章主要介紹了介紹java中Pair(配對(duì)),示例描述使用Pair類實(shí)現(xiàn)簡(jiǎn)單Integer到String的映射,示例中g(shù)etKey方法返回key對(duì)象,getValue方法返回對(duì)應(yīng)值對(duì)象,需要的朋友可以參考下
    2023-03-03
  • java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

    java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

    這篇文章主要介紹了java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java Lambda表達(dá)式和函數(shù)式接口實(shí)例分析

    Java Lambda表達(dá)式和函數(shù)式接口實(shí)例分析

    這篇文章主要介紹了Java Lambda表達(dá)式和函數(shù)式接口,結(jié)合實(shí)例形式分析了Java8 Lambda表達(dá)式和函數(shù)式接口相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java8?Stream教程之collect()的技巧

    Java8?Stream教程之collect()的技巧

    Java8引入了全新的Stream?API,這里的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同,下面這篇文章主要給大家介紹了關(guān)于Java8?Stream教程之collect()的技巧,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

永新县| 顺义区| 印江| 磐安县| 晋江市| 秦安县| 准格尔旗| 昌图县| 德庆县| 绥芬河市| 东方市| 乌兰察布市| 黄龙县| 池州市| 武穴市| 沈阳市| 宜丰县| 伊川县| 郓城县| 龙门县| 临朐县| 湘阴县| 吐鲁番市| 上思县| 长武县| 绍兴市| 新竹县| 伊川县| 横峰县| 易门县| 德庆县| 大关县| 家居| 天镇县| 虎林市| 平舆县| 东丽区| 盐山县| 奉贤区| 板桥市| 贺州市|