`
hainianqinas
  • 浏览: 82814 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

swing窗体布局基础

阅读更多


Container中的component,通常是由布局管理器 (layout manager)来管理的。每个Container(如:Panel和Frame)均有一个缺省的布局管理器,用户也可通过setLayout()方法指定其他的布局管理器。
布局管理器负责决定Container内所有组件的位置和大小。

Java中包含了下列布局管理器:

Flow Layout - 是Panel和Applet缺省的布局管理器
Border Layout - 是Window和Dialog缺省的布局管理器,即也是Frame缺省的布局管理器。
Grid Layout
Card Layout
GridBag Layout

Flow Layout Manager(顺序布局管理器)

该布局管理器对应的类为java.awt.FlowLayout。以下是一个使用Flow Layout的例子。
import java.awt.*;
public class ExGui {
private Frame f;
private Button b1;
private Button b2;
public static void main(String args[]) {
ExGui guiWindow = new ExGui();
guiWindow.go();
}
public void go() {

//create a instance of the class java.awt.Frame
f = new Frame("GUI example");

//create a instance of flow layout manager
//and install it in the Frame
f.setLayout(new FlowLayout());

// create a instance of class java.awt.Button
b1= new Button("Press Me");

//the button label is defined by the String argument
//to the constructor
b2 = new Button("Don't Press Me");

//add component b1 to Container f
f.add(b1);
f.add(b2);

//强制告诉Frame对象,对它的component再排版,
//以尽量小的空间存放这些component
f.pack();

f.setVisible(true);
}
}
程序运行效果

该例所使用的flow layout是按行来放置component的,每当一行放满后,就新产生一行开始放。
与其他布局管理器不同,flow layout管理器不对其component的大小加以限制,允许component保持其自然的尺寸,即"要多大有多大"。

Flow Layout的component的排列一般是从左到右,从上到下,类似段落中的文字行。Flow Layout通常用于安排panel中的Button和其他component。用户可通过给Flow Layout的构造方法不同的参数来调整component的位置和间距。
FlowLayout类有三种构造方法,最复杂的有三个参数,格式如下:

FlowLayout(int align,int hgap,int vgap);
其中,align决定component的位置,其值有FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT三种,缺省为FlowLayout.CENTER。 hgap和vgap分别对应水平和垂直方向的间距,缺省为5单位(unit)。

而最常用最简单的是不带参数的构造方法:
FlowLayout();

下列程序使用FlowLayout布局管理器将几个Button加到Frame中。
import java.awt.*;
public class MyFlow {
private Frame f;
private Button button1,button2,button3;
public static void main(String args[]) {
MyFlow mflow = new MyFlow();
mflow.go();
}
public void go() {
f = new Frame("Flow Layout");
f.setLayout(new FlowLayout());
button1 = new Button("Ok");
button2 = new Button("Open");
button3 = new Button("Close");
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
程序运行效果

 

Border Layout Manager(边界布局管理器)

该布局管理器对应的类为java.awt.BorderLayout。Border Layout manager提供了在Panel或Window中放置component的更复杂的方法。它包括五个区:北区(North)、南区(South)、东区(East)、西区(West)和中区(Center)。这几个区在Panel上的分布规律是"上北下南,左西右东"。

一旦东南西北四个区被填充后,剩下的空间都留给中区。当窗口水平扩展时,北、南、中三区得到扩展,垂直扩展时,东、西、中三区得到扩展。
Border布局管理器是Dialog和Frame的缺省布局管理器。

例:
import java.awt.*;
public class ExGui2 {
private Frame f;
private Button bn,bs,bw,be,bc;
public static void main(String args[]) {
ExGui2 guiWindow2 = new ExGui2();
guiWindow2.go();
}
public void go() {
f = new Frame("Border Layout");
bn = new Button("B1");
bs = new Button("B2");
be = new Button("B3");
bw = new Button("B4");
bc = new Button("B5");
f.add(bn,BorderLayout.NORTH);
f.add(bs,BorderLayout.SOUTH);
f.add(be,BorderLayout.EAST);
f.add(bw,BorderLayout.WEST);
f.add(bc,BorderLayout.CENTER);
f.setSize(200,200);
f.setVisible(true);
}
}
程序运行效果

同样,使用BorderLayout的构造方法,可设置其component的间距。如:
BorderLayout(); //component间没有间距

BorderLayout(int hgap,int vgap); // hgap和vgap分别对应水平和垂直方向的间距。

对应Border布局管理器的五个区域,一般每个区域只能有一个component, 若在一个区域中加上多个component,则只有最后加上的那个是可见的。

Grid Layout Manager(网格布局管理器)

该布局管理器对应的类为java.awt.GridLayout。Grid布局管理器提供了放置component的灵活手段。程序员可以建立一个有多行和多列的布局管理器,然后component就可以按一定的次序(从左到右,从上到下)进行排列。

当Grid布局管理器对应的窗口发生变化时,内部component的相对位置并不变化,只有大小发生变化。
Grid布局管理器总是忽略component倾向的大小(prefered size),它把每个component的大小设置成相同的。

GridLayout类有三个构造方法:
GridLayout()
//缺省建立一行的布局,每个component占居一列

GridLayout(int rows, int cols)
//建立指定行和列的布局,rows和cols对应行数和列数

GridLayout(int rows, int cols, int hgap, int vgap)
//建立指定行列数和间距的布局,hgap和vgap分别对应水平和垂直间距。

例:
import java.awt.*;
public class GridEx {
private Frame f;
private Button b1,b2,b3,b4,b5,b6;
public static void main(String args[]) {
GridEx grid = new GridEx();
grid.go();
}
public void go() {
f = new Frame("Grid example");
f.setLayout(new GridLayout(3,2));
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.pack();
f.setVisible(true);
}
}
程序运行效果


Card Layout Manager(卡片布局管理器)

Card布局管理器把用户接口看成是一系列的卡片,某一时刻只有一张是可见的。可以使用add()方法把卡片加到Card Layout中,然后使用CardLayout类中的first()、next()等方法根据需要切换到新的卡片。有兴趣的同学可自己查看参考书。


GridBag Layout Manager(网格包布局管理器)

GridBag布局管理器可以比较精确地控制Container中component的位置和大小,但它非常复杂,不太实用,这里就不作介绍了。
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=1096390

 

 

分享到:
评论

相关推荐

    java_swing窗体布局

    java_swing窗体布局,很实用。上传个大家做个分享。找了好久才找到的。

    javaswing窗体布局[归类].pdf

    javaswing窗体布局[归类].pdf

    swing界面设计之Layou

    swing界面设计之Layou 内用收集的关于面板、窗体设置大小,自动调整大小等布局知识点和经验

    基于swing实现窗体拖拽和拉伸

    主要为大家详细介绍了基于swing实现窗体拖拽和拉伸,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Jave Swing Tab页签窗体,界面漂亮,毕业设计案例

    多也签界面下拉框选择,Tab页签选项

    Java Swing实现让窗体居中显示的方法示例

    主要介绍了Java Swing实现让窗体居中显示的方法,结合实例形式分析了swing使用setBounds方法控制窗口布局的相关操作技巧,需要的朋友可以参考下

    超市管理系统 Java Swing + MySQL JDBC开发

    利用SWING编程实现商品的管理,要求如下: 1、商品管理页面布局,添加一个JScrollPanel(内嵌JTable),用来显示所有商品的信息;添加两个JLabel用于显示查询提示信息;添加JTextField用于输入商品商品名称;添加2个...

    基于JavaSwing组件实现的拼图小游戏源码+项目说明.zip

    主要运用GUI设计,使用awt的jar包来创建窗体,面板,标签、实现图片的交换 及其它们的窗口布局等,创建线程来控制进度条的进度及其显示,使用按钮监听 器来实现窗口打开和关闭、游戏的开始、暂停和关闭。 基于JavaSwing...

    Javaswing登录页面的实现

    // 设置布局为 null // 创建标题名称 this.tiel.setFont(new Font("宋体", 1, 20)); this.tiel.setBounds(150, 30, 300, 25); this.panel.add(this.tiel); // 创建 UserJLabel this.userLabel.setFont(new ...

    第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社.pptx

    窗体上的使用的是一个两行三列的网格布局,将窗体划分为了两行三列共六个部分,每个部分放上一个按钮组件。 this.setLayout(new GridLayout(2, 3)); this.add(button1); this.add(button2); this.add(button3); ...

    仿QQ登录窗体,拉伸展开!

    // 显示窗体的登录进度面板 getGlassPane().setVisible(true); } }*/ public static void main(String[] args) { try { UIManager .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel")...

    java窗体GUI所有组件学习

    整理了Java GUI编程基础知识! public class AllFrame { /** * 这里的代码涉及到 GUI 编程基本面板、基本组件、事件(ActionListener、ChangeListener、MouseListener) */ public AllFrame() { // new 一...

    Java课程设计-基于Java swing带GUI界面的图书管理系统(源码+数据库+报告).zip

    通过应用awt等包,合理的添加了按钮、菜单、文本框、文本区、表格等组件类,还包含窗口、面板等容器类,经过设计者合理的布局,完成了窗体的设计,并通过建立JDBC-ODBC桥接器连接到mysql数据库后,向数据库发送SQL...

    漏电重合闸读写测试.rar

    上位机与下位机通讯,使用了javaSwing的Windows窗体布局,进行了设备升级、读写设备信息等等,EXE执行程序可以直接查看源程序运行的窗口效果(附有源程序源码),上传的jar包是32位和64位系统运行程序,链接是百度...

    Java Swing 常用控件

    目录Swing 常用控件1. JFrame2. JLabel3. JButton4. JTextArea5. JTextField6. JPasswordField7. JRadioButton8. JCheckBox9. JComboBox10. JList Swing 常用控件 Swing 常用控件包括 JFrame、JLabel、JButton、...

    Java Swing图形界面开发与案例详解随书实例代码

    摘要:Java源码,窗体界面,Swing 《Java Swing图形界面开发与案例详解》全书的随书实例代码,每一章节中的实例都有,部分文件的功能如下:  使用BorderLayout布局管理器将组件进行布局  第五章test4.java主要用途是...

    Java工程师必学系列课程之4--《Java Swing》视频课程

     一、窗体的概念以及窗体的创建方法  二、布局管理器的概念和常用的布局管理器  三、事件以及监听器相关知识  四、Swing组件的应用  本课程虽然主要讲解的是Java Swing开发技术,但在课程中,作者融入了...

    javaswingJtable资源

    JTable 是java窗体应用,关于布局,JTable的方法和一些其他的运用

    仓库管理系统.zip

    此系统利用Eclipse、SQL Server数据库和 GUI(图形用户界面)的Swing实现,Java组件有:JFrame窗体,布局管理器中的绝对布局,边界布局管理器,JPanel面板,JLabel标签和JToolBar等,可实现用户注册登录、仓库和商品...

Global site tag (gtag.js) - Google Analytics