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

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

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

什么是容器?

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

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

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

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

實例程序如下:

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

效果如下:

什么是面板?

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

JPanel面板

在JPanel面板中我們可以添加一些組件來對該面板中的內容進行布局,之所以它具備這樣的功能,是因為JPanel面板同樣也繼承了java.awt.Container類,因此它同樣是具有Container容器的功能,

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

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

JScrollPane面板

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

使用JScrollPane面板時需要注意以下兩個問題:

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

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

通過下面程序對JScrollPane面板進行實踐:

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

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

效果如下:

什么是布局管理器?

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

絕對布局管理器

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

使用絕對布局時首先有一點需要注意:

就是要先取消默認布局管理器,方法為:

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

之后再使用以下方法對組件進行絕對定位:

setBounds(x,y,width,height);

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

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

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);	//為組件設置絕對坐標
		container.add(jb1);		//將組件添加到容器
		JButton jb2 = new JButton("這是絕對布局2");
		jb2.setBounds(200, 100, 200, 30);	//為組件設置絕對坐標
		container.add(jb2);	//將組件添加到容器
		JButton jb3 = new JButton("這是絕對布局3");
		jb3.setBounds(200, 150, 200, 30);	//為組件設置絕對坐標
		container.add(jb3);	//將組件添加到容器
		setLayout(null);	//清空布局管理器,即取消原來的邊界布局管理器
		setVisible(true);	//設置窗體可見
		setLocationRelativeTo(null);	//設置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設置窗體關閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new AbsolutelyLayoutClass();
	}
}

效果如下:

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

流布局管理器

流布局管理器(FlowLayout)具有的特點就是:在其中的組件可以像“流”一樣按照從左到右的順序依次的排列,直到該行排列完畢后再從下一行繼續(xù)排列。在默認的情況下,組將在流布局管理器中都是以居中排列的,當然排列的順序是可以改變的,

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

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

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

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

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

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

關于流布局管理器的具體使用可以參考如下實例:

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

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

效果如下:

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

邊界布局管理

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

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

成員變量

含義

BorderLayout.NORTH

在容器中添加組件時,組件置于頂端

BorderLayout.SOUTH

在容器中添加組件時,組件置于底端

BorderLayout.EAST

在容器中添加組件時,組件置于右端

BorderLayout.WEST

在容器中添加組件時,組件置于左端

BorderLayout.CENTER

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

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

public class BorderLayoutClass extends JFrame{
	public BorderLayoutClass() {
		setTitle("邊界布局管理器");
		setSize(600,300);
		Container container = getContentPane();		//將窗體變?yōu)槿萜?
		/****************使用邊界布局管理器布局組件******************/
		//將容器設置為邊界布局管理器
		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);	//設置窗體可見
		setLocationRelativeTo(null);	//設置窗體居中
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//設置窗體關閉方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new BorderLayoutClass();
	}
}

效果如下:

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

網格布局管理器

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

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

網格布局中常用的布局管理器有如下兩種:

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

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

關于網格布局管理器的具體使用參考如下實例,

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

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

效果如下

在拉動窗體改變大小時,網格的大小也會隨之改變。

容器、面板、布局管理器之間的關系

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

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

總結

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

相關文章

  • Spring Boot面試題總結

    Spring Boot面試題總結

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

    java io讀取文件操作代碼實例

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

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

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

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

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

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

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

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

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

    Spring Security其它權限校驗方式&自定義權限校驗方式

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

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

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

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

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

    java中JSON字符串轉換為Map集合的兩種方法

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

最新評論