【Java】Java中GUI之布局管理器,
【Java】Java中GUI之布局管理器,
【概念】
布局管理器:是对容器中的元素进行布局管理,按照一定的规则将容器里面的元素或组件进行排放。
【分类】
1、FlowLayout:流式布局管理器
2、BorderLayout:边框布局管理器
3、GridLayout:网格布局管理器
4、CardLayout:卡片布局管理器
5、 GridBagLayout:网格包布局管理器
FlowLayout
FlowLayout(流式布局)是最简单的布局管理器。它将组件按照添加时的次序由左到右排列。一行排满之后,重新开始下一行。可以通过使用FlowLayout.Right、FlowLayout.CENTER或FlowLayout.LEFT其中的一个常量指定组件的排列方式。同时也可以以像素为单位指定各组件之间的间距。FlowLayout有3个构造函数。
FlowLayout()以默认的居中排列和默认的5像素的水平间距及5像素的垂直像素间距构造一个新的FlowLayout。
FlowLaout(int alignment) 以指定的排列和默认的5像素的水平间距构造一个新的FlowLayout。
FlowLaout(int align,int HCap,intvCap) 以指定的排列水平间距和垂直间距构造一个新的FLowLayout。
代码:
import java.awt.*;
import java.awt.event.*;
public class FrameTest{
public static void main(String[] args)
{
//创建一个框架
Frame f=new Frame("Test");
//设置窗体大小
f.setSize(800,600);
//设置窗体显示位置
f.setLocation(100,100);
Button btn1=new Button("Button1"); //创建按钮对象
f.setBackground(Color.BLUE); //窗体背景色
f.setVisible(true); //窗体可见
f.setLayout(new FlowLayout());//设置浮动布局方式
Button btn2=new Button("Button2");
Button btn3=new Button("Button3");
Button btn4=new Button("Button4");
Button btn5=new Button("Button5");
f.add(btn1);
f.add(btn2);
f.add(btn3);
f.add(btn4);
f.add(btn5);
}
}
当我改变窗口的大小,相应的组件的位置也会发生改变,如图所示。对于FlowLayout还提供了按钮的对齐方式,比如说f.setLayout(new FlowLayout(FlowLayout.LEFT)),就设置了左对齐的方式,这些按钮将会从左边依次摆放
BorderLayout
这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。
代码:
import java.awt.*;
import java.awt.event.*;
public class FrameTest{
public static void main(String[] args)
{
//创建一个框架
Frame f=new Frame("Test");
//设置窗体大小
f.setSize(800,600);
//设置窗体显示位置
f.setLocation(100,100);
Button btn1=new Button("Button1"); //创建按钮对象
f.setBackground(Color.BLUE); //窗体背景色
f.setVisible(true); //窗体可见
Button btn2=new Button("Button2");
Button btn3=new Button("Button3");
Button btn4=new Button("Button4");
Button btn5=new Button("Button5");
f.add(btn1,"Center"); //将按钮添加到窗体中,并设置显示位置
f.add(btn2,"North");
f.add(btn3,"West");
f.add(btn4,"South");
f.add(btn5,"East");
}
}
GridLayout
将容器分成网格,在创建GridLayout布局管理器对象的时候需要传递两个参数,一个代表行另一个代表列。代码:
import java.awt.*;
import java.awt.event.*;
public class FrameTest{
public static void main(String[] args)
{
//创建一个框架
Frame f=new Frame("Test");
//设置窗体大小
f.setSize(800,600);
//设置窗体显示位置
f.setLocation(100,100);
Button btn1=new Button("Button1"); //创建按钮对象
f.setBackground(Color.BLUE); //窗体背景色
f.setVisible(true); //窗体可见
//f.setLayout(new FlowLayout());//设置浮动布局方式
f.setLayout(new GridLayout(3,1,10,10));//设置布局方式并设置组件间间隙
Button btn2=new Button("Button2");
Button btn3=new Button("Button3");
Button btn4=new Button("Button4");
Button btn5=new Button("Button5");
f.add(btn1);
f.add(btn2);
f.add(btn3);
f.add(btn4);
f.add(btn5);
}
}
布局后的版面就如同表格一样整齐有序,加入的组件按顺序由左至右、由上至下摆放,所以无法直接指定要摆放的区域,同时,组件放入后变成了方形。
CardLayout
CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面.布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就相当于布局管理器中的每一层。
代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameTest {
private static JPanel p;
public static void main(String[] args) {
JFrame f=new JFrame("CardLayout");
p=new JPanel();
//将JPanel p的LayoutManager设置为CardLayout
p.setLayout(new CardLayout());
//新建两个JPanel
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JLabel lb=new JLabel("first panel");
p1.add(lb);
lb=new JLabel("second panel");
p2.add(lb);
//将新建的两个JPanel p1,p2添加到p中
p.add(p1,"frist");
p.add(p2,"second");
//设置默认显示first所对应的JPanel p1
((CardLayout)p.getLayout()).show(p, "frist");
JButton cbtn=new JButton("Change");
cbtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//当按下Change按钮时,显示second 对应的JPanel p2
((CardLayout)p.getLayout()).show(p, "second");
}
});
f.add(cbtn,BorderLayout.NORTH);
f.add(p,BorderLayout.CENTER);
f.setSize(400,150);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
每点击一下、显示内容就会变化。
GridBagLayout
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的,
GridBagLayout
类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。
每个 GridBagLayout
对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,该单元被称为显示区域。
代码:
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JButton;
public class FrameTest {
public static void main(String[] args) {
JFrame f=new JFrame("GridBagLayout");
f.setLayout(new GridBagLayout());
JButton btn=new JButton("Button1");
GridBagConstraints gbc=new GridBagConstraints();
//设定第一个单元格的属性值
gbc.gridx=0; //横坐标
gbc.gridy=0; //纵坐标
gbc.gridwidth=1; //组件宽
gbc.gridheight=1; //组件高
gbc.weightx=0; //行的权重,通过这个属性来决定如何分配行的剩余空间
gbc.weighty=0;
gbc.anchor=GridBagConstraints.NORTHWEST;
//当组件在格内而不能撑满其格时,通过fill的值来设定填充方式,有四个值
gbc.fill=GridBagConstraints.NONE;
gbc.insets=new Insets(0,0,0,0);
gbc.ipadx=0; //组件间的横向间距
gbc.ipady=0; //组件间的纵向间距
f.add(btn,gbc);
//设定第二个单元格属性值
gbc.gridx=1;
gbc.gridy=0;
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbc.gridheight=1;
gbc.weightx=1;
gbc.weighty=0;
// 当组件小于其显示区域时,用于确定将组件置于何处(在显示区域中)
gbc.anchor=GridBagConstraints.CENTER;
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.insets=new Insets(5,5,5,5); //设置组件之间彼此的间距
gbc.ipadx=0;
gbc.ipady=0;
btn=new JButton("Button2");
f.add(btn,gbc);
//设定第三个单元格属性值
gbc.gridx=0;
gbc.gridy=1;
gbc.gridwidth=1;
gbc.gridheight=GridBagConstraints.REMAINDER;
gbc.weightx=0;
gbc.weighty=1;
gbc.anchor=GridBagConstraints.CENTER;
gbc.fill=GridBagConstraints.VERTICAL;
gbc.insets=new Insets(0,0,0,0);
gbc.ipadx=10;
gbc.ipady=10;
btn=new JButton("Button3");
f.add(btn,gbc);
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
【总结】
GUI的布局管理器、可以使我们的布局更加合理、更加好看。
相关文章
- 暂无相关文章
用户点评