Java AWT中常用的三種布局管理器詳解
布局管理器
在java.awt 包中提供了5中常用的布局管理器,分別式FlowLayout(流式布局管理器)、BorderLayout(邊界布局管理器)、GridLayout(網(wǎng)格布局管理器)、GridBagLayout(網(wǎng)格包布局管理器)和CradLayout(卡片布局管理器)。
每種容器在創(chuàng)建時,沒有進行布置時會使用默認(rèn)的布局管理器,在程序中可以通過setLayout()方法設(shè)置布局管理器,通過布局管理器自動進行組件的布局管理。
例如,把一個Frame 窗體的布局管理器設(shè)置為FlowLayou,代碼入下:
+ Frame frame = new Frame(); + frame.setLayout(new FlowLayout());
一、流程布局管理器(FlowLayout)
流程布局管理器(Flow Layout)是簡單的布局管理器,在這種布局管理下,容器會按照組件的順序從左到放置。當(dāng)?shù)饺萜鞯倪吔鐣r,會自動將組件放到下一行的開始位置。
這些組件可以左對齊,右對齊,居中對齊(默認(rèn)方式)
流程布局管理器(Flowlayout)運用如下:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestFlowLayout {
public static void main(String[] args) {
Frame f = new Frame("ser");
f.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 100));//居中 將組件間的橫向間隙50像素和縱向間隙100像素
//f.setLayout(new FlowLayout(FlowLayout.LEFT, 50, 100));//靠左 窗口變大體現(xiàn)效果更佳
//f.setLayout(new FlowLayout(FlowLayout.RIGHT, 50, 100));//靠右 窗口變大體現(xiàn)效果更佳 f.setSize(200, 500);//(寬,高)
f.setLocation(300, 200);//(x, y)
f.setVisible(true);//窗體可見
//設(shè)置大小固定 默認(rèn)是可以自由拉伸的 false 不可以改變
f.setResizable(true);
f.add(new Button("First"));
f.add(new Button("Second"));
f.add(new Button("Third"));
f.add(new Button("Forth"));
//監(jiān)聽窗口關(guān)閉
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果圖:

二、邊界布局管理器(BorderLayout)
BorderLayout(邊界布局管理器)是一種較為復(fù)雜的布局方式,它將容器劃分為5個區(qū)域,分別是東(EAST),西(WEST),南(SOUTH),北(NORTH),中(CENTER)。
組件可以被放置在這5個區(qū)域的任意一個位置。
邊界布局管理器(BorderLayout)應(yīng)用如下:
//東西南北中
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("sss");
frame.setVisible(true);
frame.setSize(500,500);
Button east = new Button("east");
Button west = new Button("west");
Button north = new Button("north");
Button south = new Button("south");
Button center = new Button("center"); frame.add(east,BorderLayout.EAST);
frame.add(west,BorderLayout.WEST);
frame.add(north,BorderLayout.NORTH);
frame.add(south,BorderLayout.SOUTH);
frame.add(center,BorderLayout.CENTER);
//監(jiān)聽窗口關(guān)閉
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果圖:

三 、網(wǎng)格布局管理器
GridLayout(網(wǎng)格布局管理器)是用縱橫將容器分為n行m列的大小相等的網(wǎng)格,每個網(wǎng)格中放置一個組件。依照放入順序,依次放入,第一行放滿后放第二行。
GridLayout與FlowLayout的不同是,放置在GridLayout布局管理器中的組件會自動占據(jù)網(wǎng)格的整個區(qū)域。
網(wǎng)格布局管理器(GrudLayout)應(yīng)用如下:
//網(wǎng)格式布局
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class GridLayout {
public static void main(String[] args) {
Frame frame = new Frame("yyy");
frame.setVisible(true);
frame.setSize(600,600);
Button btn1 =new Button("btn1");
Button btn2 =new Button("btn2");
Button btn3 =new Button("btn3");
Button btn4 =new Button("btn4");
Button btn5 =new Button("btn5");
Button btn6 =new Button("btn6"); frame.setLayout(new java.awt.GridLayout(3,2));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6); frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果圖:

四、 綜合實例運用
使用上述布局方法實現(xiàn)如下圖所示的組件添加:

實現(xiàn)代碼如下:
/*
思路:
首先分成三個部分
第一個部分: 東西兩個位置可以使用BorderLayout(邊界布局管理器) 然后在中間加入一個
GridLayout(網(wǎng)格布局管理器)兩行一列放入組件
第二個部分: 東西兩個位置可以使用BorderLayout(邊界布局管理器) 然后在中間加入一個
GridLayout(網(wǎng)格布局管理器)兩行兩列放入組件
第一個部分: GridLayout(網(wǎng)格布局管理器)兩行兩列放入組件
一共用到5個panel(面板)
*///主要是一個嵌套的思想
import java.awt.*;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class ExGUI {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setSize(600,300);
frame.setVisible(true);
frame.setBackground(Color.BLACK);
frame.setLayout(new GridLayout(3,1));//少了就只有一個
//為什么加入的那件
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new GridLayout(2,1));
Panel p3 = new Panel(new BorderLayout());
Panel p4 = new Panel(new GridLayout(2,2));
Panel p5 = new Panel(new GridLayout(2,2));
//上
p1.add(new Button("b1"),BorderLayout.WEST);
p1.add(new Button("b2"),BorderLayout.EAST);
p2.add(new Button("b3"));
p2.add(new Button("b4")); p1.add(p2,BorderLayout.CENTER); p3.add(new Button("b1"),BorderLayout.WEST);
p3.add(new Button("b2"),BorderLayout.EAST);
for (int i = 0; i < 4; i++) {
p4.add(new Button("b"+i));
}
p3.add(p4,BorderLayout.CENTER);
for (int i = 0; i < 4; i++) {
p5.add(new Button("b"+i));
}
frame.add(p1);
frame.add(p3);
frame.add(p5);//面版不能復(fù)用只能使用一次 加入frame比加入panel優(yōu)先
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//退出系統(tǒng)
}
});
}
}
運行效果:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)
這篇文章主要介紹了DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?首先自定義一個過濾器?DubboLoggerFilter.java,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-12-12
Java 數(shù)據(jù)結(jié)構(gòu)之時間復(fù)雜度與空間復(fù)雜度詳解
算法復(fù)雜度分為時間復(fù)雜度和空間復(fù)雜度。其作用: 時間復(fù)雜度是度量算法執(zhí)行的時間長短;而空間復(fù)雜度是度量算法所需存儲空間的大小2021-11-11
Java使用Tessdata做OCR圖片文字識別的詳細(xì)思路
這篇文章主要介紹了Java使用Tessdata做OCR圖片文字識別的詳細(xì)思路,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
Spring 使用 feign時設(shè)置header信息的操作
這篇文章主要介紹了Spring 使用 feign時設(shè)置header信息的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

