Java AWT中常用的三種布局管理器詳解
布局管理器
在java.awt 包中提供了5中常用的布局管理器,分別式FlowLayout(流式布局管理器)、BorderLayout(邊界布局管理器)、GridLayout(網(wǎng)格布局管理器)、GridBagLayout(網(wǎng)格包布局管理器)和CradLayout(卡片布局管理器)。
每種容器在創(chuàng)建時(shí),沒有進(jìn)行布置時(shí)會(huì)使用默認(rèn)的布局管理器,在程序中可以通過setLayout()方法設(shè)置布局管理器,通過布局管理器自動(dòng)進(jìn)行組件的布局管理。
例如,把一個(gè)Frame 窗體的布局管理器設(shè)置為FlowLayou,代碼入下:
+ Frame frame = new Frame(); + frame.setLayout(new FlowLayout());
一、流程布局管理器(FlowLayout)
流程布局管理器(Flow Layout)是簡(jiǎn)單的布局管理器,在這種布局管理下,容器會(huì)按照組件的順序從左到放置。當(dāng)?shù)饺萜鞯倪吔鐣r(shí),會(huì)自動(dòng)將組件放到下一行的開始位置。
這些組件可以左對(duì)齊,右對(duì)齊,居中對(duì)齊(默認(rèn)方式)
流程布局管理器(Flowlayout)運(yùn)用如下:
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個(gè)區(qū)域,分別是東(EAST),西(WEST),南(SOUTH),北(NORTH),中(CENTER)。
組件可以被放置在這5個(gè)區(qū)域的任意一個(gè)位置。
邊界布局管理器(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)格,每個(gè)網(wǎng)格中放置一個(gè)組件。依照放入順序,依次放入,第一行放滿后放第二行。
GridLayout與FlowLayout的不同是,放置在GridLayout布局管理器中的組件會(huì)自動(dòng)占據(jù)網(wǎng)格的整個(gè)區(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); } }); } }
效果圖:
四、 綜合實(shí)例運(yùn)用
使用上述布局方法實(shí)現(xiàn)如下圖所示的組件添加:
實(shí)現(xiàn)代碼如下:
/* 思路: 首先分成三個(gè)部分 第一個(gè)部分: 東西兩個(gè)位置可以使用BorderLayout(邊界布局管理器) 然后在中間加入一個(gè) GridLayout(網(wǎng)格布局管理器)兩行一列放入組件 第二個(gè)部分: 東西兩個(gè)位置可以使用BorderLayout(邊界布局管理器) 然后在中間加入一個(gè) GridLayout(網(wǎng)格布局管理器)兩行兩列放入組件 第一個(gè)部分: GridLayout(網(wǎng)格布局管理器)兩行兩列放入組件 一共用到5個(gè)panel(面板) *///主要是一個(gè)嵌套的思想 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));//少了就只有一個(gè) //為什么加入的那件 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) } }); } }
運(yùn)行效果:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA設(shè)置手動(dòng)提交事務(wù),回滾事務(wù),提交事務(wù)的操作
這篇文章主要介紹了JAVA設(shè)置手動(dòng)提交事務(wù),回滾事務(wù),提交事務(wù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04java集合類arraylist循環(huán)中刪除特定元素的方法
下面小編就為大家?guī)硪黄狫ava集合類ArrayList循環(huán)中刪除特定元素的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11SpringBoot使用redis生成訂單號(hào)的實(shí)現(xiàn)示例
在電商系統(tǒng)中,生成唯一訂單號(hào)是常見需求,本文介紹如何利用SpringBoot和Redis實(shí)現(xiàn)訂單號(hào)的生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09Mybatis Integer類型參數(shù)值為0時(shí)得到為空的解決方法
這篇文章主要介紹了Mybatis Integer類型參數(shù)值為0時(shí)得到為空的解決方法,有需要的朋友們可以學(xué)習(xí)下。2019-08-08java、spring、springboot中整合Redis的詳細(xì)講解
這篇文章主要介紹了java、spring、springboot中整合Redis的詳細(xì)講解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Springboot集成SSE實(shí)現(xiàn)單工通信消息推送流程詳解
SSE簡(jiǎn)單的來說就是服務(wù)器主動(dòng)向前端推送數(shù)據(jù)的一種技術(shù),它是單向的,也就是說前端是不能向服務(wù)器發(fā)送數(shù)據(jù)的。SSE適用于消息推送,監(jiān)控等只需要服務(wù)器推送數(shù)據(jù)的場(chǎng)景中,下面是使用Spring Boot來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的模擬向前端推動(dòng)進(jìn)度數(shù)據(jù),前端頁(yè)面接受后展示進(jìn)度條2022-11-11Java實(shí)現(xiàn)根據(jù)前端所要格式返回樹形3級(jí)層級(jí)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)根據(jù)前端所要格式返回樹形3級(jí)層級(jí)數(shù)據(jù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2024-02-02