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

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

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

什么是容器?

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

而關(guān)于container容器我們應(yīng)該有這樣的認(rèn)識:Swing組件中的窗體通常是與容器相關(guān)聯(lián)的,所以在一般情況下,建立完JFrame窗體后,我們會調(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è)置窗體可見
		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面板,下面分別對這兩種面板的用途進(jìn)行介紹:

JPanel面板

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

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

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

JScrollPane面板

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

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

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

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

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

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

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è)置窗體可見
		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í)是很難判斷其具體位置和大小的,布局管理器就提供了一種對swing組件的排版方式,因此使用布局管理器就可以很有效的處理整個(gè)窗體中組件的布局方式,Swing提供的常用的布局管理器有四種:絕對布局管理器、流布局管理器、邊界布局管理器、網(wǎng)格布局管理器,接下來會對這四種布局管理器進(jìn)行探討。

絕對布局管理器

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

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

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

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

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

setBounds(x,y,width,height);

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

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

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

效果如下:

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

流布局管理器

流布局管理器(FlowLayout)具有的特點(diǎn)就是:在其中的組件可以像“流”一樣按照從左到右的順序依次的排列,直到該行排列完畢后再從下一行繼續(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);	//清空布局管理器,即取消原來的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		new FlowLayoutClass();
	}
}

效果如下:

在我們拉動窗體大小變化時(shí),其中的組件也會按照流布局的特點(diǎn)發(fā)生改變,這就驗(yàn)證了流布局管理器中的組件按照從左到右的順序依次擺放,直到該行占滿后再從下一行開始擺放。

邊界布局管理

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

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

成員變量

含義

BorderLayout.NORTH

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

BorderLayout.SOUTH

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

BorderLayout.EAST

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

BorderLayout.WEST

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

BorderLayout.CENTER

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

關(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);	//清空布局管理器,即取消原來的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見
		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)格布局,將會劃分成四個(gè)大小相同的網(wǎng)格。

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

網(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ù)和流布局管理器中的一樣,只不過在流布局管理器中表示的是組件之間的水平和垂直間距,而在網(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);	//清空布局管理器,即取消原來的邊界布局管理器
		setVisible(true);	//設(shè)置窗體可見
		setLocationRelativeTo(null);	//設(shè)置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設(shè)置窗體關(guān)閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new GridLayoutClass();
	}
}

效果如下

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Spring Boot面試題總結(jié)

    Spring Boot面試題總結(jié)

    這篇文章主要介紹了Spring Boot面試題總結(jié),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java io讀取文件操作代碼實(shí)例

    java io讀取文件操作代碼實(shí)例

    這篇文章主要介紹了java io讀取文件操作代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java獲取redis日志信息與動態(tài)監(jiān)控信息的方法

    java獲取redis日志信息與動態(tài)監(jiān)控信息的方法

    這篇文章主要給大家介紹了關(guān)于java如何獲取redis日志信息與動態(tài)監(jiān)控信息的方法,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解

    Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解

    這篇文章主要為大家介紹了Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring MVC處理參數(shù)中的枚舉類型通用實(shí)現(xiàn)方法

    Spring MVC處理參數(shù)中的枚舉類型通用實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Spring MVC處理參數(shù)中的枚舉類型通用實(shí)現(xiàn)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-11-11
  • 詳解mybatis通過mapper接口加載映射文件

    詳解mybatis通過mapper接口加載映射文件

    本篇文章主要介紹了mybatis通過mapper接口加載映射文件 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring Security其它權(quán)限校驗(yàn)方式&自定義權(quán)限校驗(yàn)方式

    Spring Security其它權(quán)限校驗(yàn)方式&自定義權(quán)限校驗(yàn)方式

    這篇文章主要介紹了Spring Security其它權(quán)限校驗(yàn)方式&自定義權(quán)限校驗(yàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)

    詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)

    這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺談SpringMVC之視圖解析器(ViewResolver)

    淺談SpringMVC之視圖解析器(ViewResolver)

    本篇文章主要介紹了淺談SpringMVC之視圖解析器(ViewResolver),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • java中JSON字符串轉(zhuǎn)換為Map集合的兩種方法

    java中JSON字符串轉(zhuǎn)換為Map集合的兩種方法

    本文主要介紹了java中JSON字符串轉(zhuǎn)換為Map集合,包含了兩種方法,這種需求可能涉及到從外部接口獲取數(shù)據(jù),或者在程序中處理配置信息等,感興趣的可以了解一下
    2024-07-07

最新評論