`
快乐的拖拉机
  • 浏览: 9564 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

swing 布局

 
阅读更多
 1,BorderLayout是JFrame,JApplet,JDialog的默认布局管理器,它有五个位置,分别是北,南,东,西,中.
  2,BoxLayout 是按一条直线摆放,可以按X,或Y轴摆放.
  jPanel2.setLayout(new BoxLayout(jPanel2,BoxLayout.X))
  jPanel2.add(jButton1);
  jButton1.setAlignmentX(component.CENTER_ALIGNMENT);//居中对齐
  注:在编辑框里有alingmentX或者是alingmentY属性,在文本框里输入范围为0-1的数字,0.5是居中对齐,0是居左对齐,1是居右对齐,其它的小数是指相对Box的几分之几.
  3,CardLayout 是一张叠着一张摆放的效果
  jPanel2.setLayout(new CardLayout());
  first(Container);//显示第一页
  next(Container);//
  previous(container);//前一页
  last(Container);//显示最后一页
  show(Container,String);//显示指定名字的页
  4,FlowLayout是按直线排列的布局
  jPanel2.setLayout(new FlowLayout())
  jPanel2.setLayout(new FlowLayout(FlowLayout.CENTER))
  jPanel2.setLayout(new FolwLayout(FlowLayout.CENTER,INT X,INT Y))
  FlowLayout的位置属性有:
  CENTER//居中
  LEFT//居左
  RIGHT//居右
  LEADING//居左
  TRAILING//居右
  setAlignment//设置位置属性
  setHgrp()//设置水平间隔
  setVgap()//设置垂直间隔
  5,GridLayout是将控件按照表格布局排列好。
  jPanel2.setLayout(new GridLayout());
  jPanel2.setLayout(new GridLayout(int rows,int cols));
  jPanel2.setLayout(new GridLayout(int rows,int cols,int hgap,int vgap));
  setRows(int rows)//设置行数
  setColumns(int cols)//设置列数
  setHgap(int hgap)//水平间隙
  setVgap(int vgap)//设置垂直间隙
  6,GridBagLayout 布局比前面所介绍的布局更灵活,并不要求控件的大小一样。
  jPanel2.setLayout(new GridLayout())
  GridBagconstraints(int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,int anchor,int fill,Insets insets,int ipadx,int ipady)
  7,任意坐标布局
  jButton.setBounds(new Rectangle(53,128,121,29))
  Rectangle(int x,int y,int width,int height)
  







package Test;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class LayoutTest {
//添加控件到容器
public static void addComponentsToPane(Container pane) {
pane.setLayout(new FlowLayout());
pane.add(new JButton("Button 1"));
pane.add(new JButton("Button 2"));
pane.add(new JButton("Button 3"));
pane.add(new JButton("Long-Named Button 4"));
pane.add(new JButton("5"));
}
//创建实例窗体
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("FlowLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Set up the content pane.
addComponentsToPane(frame.getContentPane());
// Display the window.
frame.pack();
frame.setVisible(true);
}
//程序入口
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
由于后面的所有代码均具有相同的结构,所以只对addComponentsToPane进行说明。

1、FlowLayout:流式布局模式

FlowLayout是最简单的布局管理器。它按照和页面上排列单词的类似方式来安排组件----从左到右,直至没有多余的空间,然后转到下一行。
效果:

添加控件到容器的方法:
public static void addComponentsToPane(Container pane) {
pane.setLayout(new FlowLayout());
pane.add(new JButton("Button 1"));
pane.add(new JButton("Button 2"));
pane.add(new JButton("Button 3"));
pane.add(new JButton("Long-Named Button 4"));
pane.add(new JButton("5"));
}
2、BorderLayout:边框布局

BorderLayout是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多 只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。当使用边框布局将一个组件添加到容器中时,要 使用这五个常量之一,例如:
?
1
2
3 Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(new Button("Okay"), BorderLayout.SOUTH);
效果:

添加控件到容器的方法:
?
2
3
4
5
6
7
8
9
10
11
12
13
14 public static void addComponentsToPane(Container pane) {
JButton button = new JButton("Button 1 (PAGE_START)");
pane.add(button, BorderLayout.PAGE_START);
button = new JButton("Button 2 (CENTER)");
button.setPreferredSize(new Dimension(200, 100));
pane.add(button, BorderLayout.CENTER);
button = new JButton("Button 3 (LINE_START)");
pane.add(button, BorderLayout.LINE_START);
button = new JButton("Long-Named Button 4 (PAGE_END)");
pane.add(button, BorderLayout.PAGE_END);
button = new JButton("5 (LINE_END)");
pane.add(button, BorderLayout.LINE_END);
}
3、BoxLayout:盒子布局

BoxLayout可以将组件由上至下或由左至右依次加入当前面板,该布局模式允许垂直或水平布置多个组件的布局管理器。这些组件将不包装,因此举例来说,垂直排列的组件在重新调整框架的大小时仍然被垂直排列。
效果:

内容面板代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 private static void addAButton(String text, Container container) {
JButton button = new JButton(text);
button.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(button);
}
private static void addButtons(Container container) {
addAButton("Button 1", container);
addAButton("Button 2", container);
addAButton("Button 3", container);
addAButton("Long-Named Button 4", container);
addAButton("5", container);
}
//添加控件到容器
public static void addComponentsToPane(Container pane) {
JPanel xPanel = new JPanel();
xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
addButtons(xPanel);
JPanel yPanel = new JPanel();
yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));
addButtons(yPanel);
pane.add(yPanel, BorderLayout.PAGE_START);
pane.add(xPanel, BorderLayout.PAGE_END);
}
4、CardLayout:卡片布局

CardLayout 对象是容器的布局管理器(这种布局模式特别适合设计向导对话框)。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,容器则充当卡片的堆栈。当容器第一次显示时,第一个添加到 CardLayout 对象的组件为可见组件。 卡片的顺序由组件对象本身在容器内部的顺序决定。CardLayout 定义了一组方法,这些方法允许应用程序按顺序地浏览这些卡片,或者显示指定的卡片。
效果:

内容面板代码:
public static void addComponentsToPane(Container pane) {
final JPanel contentPanel = new JPanel();
JPanel controlPanel = new JPanel();
final CardLayout cardLayout=new CardLayout();;
pane.setLayout(new BorderLayout());
pane.add(contentPanel, BorderLayout.CENTER);
pane.add(controlPanel, BorderLayout.PAGE_END);
controlPanel.setLayout(new FlowLayout());
JButton[] b = new JButton[10];
for (int i = 0; i < 10; i++) {
b[i] = new JButton("No." + i);
contentPanel.add(b[i]);
}
contentPanel.setLayout(cardLayout);
JButton nextButton = new JButton("next");
nextButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
cardLayout.next(contentPanel);
}});
controlPanel.add(nextButton);
}
5、GridLayout:网格布局

GridLayout 类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件。当组件加入时,会依序又左至右,由上至下填充到每个格子,它不能由你指定想放那个格子就放那个格子。
效果:

内容面板代码:
public static void addComponentsToPane(Container pane) {
JButton[] buttons = new JButton[9];
pane.setLayout(new GridLayout(3, 3));
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(i + "");
pane.add(buttons[i]);
}
}
6、GridBagLayout:网袋布局

GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的。GridBagLayout同GridLayout一样,在容器中以网格形式来管理组件。但GridBagLayout功能要来得强大得多,主要体现在以下两方面:

1、GridBagLayout管理的所有行和列都可以是大小不同的;
2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域。

GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints。其中有11个公有成员变量,GridBagConstraints可以从这11个方面来进行控制和操纵。这些内容是:

1、gridx—组件的横向坐标;
2、girdy—组件的纵向坐标;
3、gridwidth—组件的横向宽度,也就是指组件占用的列数;
4、gridheight—组件的纵向长度,也就是指组件占用的行数;
5、weightx—指行的权重,告诉布局管理器如何分配额外的水平空间;
6、weighty—指列的权重,告诉布局管理器如何分配额外的垂直空间;
7、anchor—当组件小于其显示区域时使用此字段;
8、fill—如果显示区域比组件的区域大的时候,可以用来控制组件的行为。控制组件是垂直填充,还是水平填充,或者两个方向一起填充;
9、insets—指组件与表格空间四周边缘的空白区域的大小;
10、ipadx— 组件间的横向间距,组件的宽度就是这个组件的最小宽度加上ipadx值;
11、ipady— 组件间的纵向间距,组件的高度就是这个组件的最小高度加上ipady值。

补充说明:

1、gridx,gridy:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列;
2、gridwidth,gridheight:默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间;
3、weightx,weighty:当窗口变大时,设置各组件跟着变大的比例。比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B;
4、anchor:当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
5、insets:设置组件之间彼此的间距。它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。

效果:

内容面板代码:
public static void addComponentsToPane(Container pane) {
JButton button;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
button = new JButton("Button 1");
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
pane.add(button, c);
button = new JButton("Button 2");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 1;
c.gridy = 0;
pane.add(button, c);
button = new JButton("Button 3");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 2;
c.gridy = 0;
pane.add(button, c);
button = new JButton("Long-Named Button 4");
c.fill = GridBagConstraints.HORIZONTAL;
c.ipady = 40; // make this component tall
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
pane.add(button, c);
button = new JButton("5");
c.fill = GridBagConstraints.HORIZONTAL;
c.ipady = 0; // reset to default
c.weighty = 1.0; // request any extra vertical space
c.anchor = GridBagConstraints.PAGE_END; // bottom of space
c.insets = new Insets(10, 0, 0, 0); // top padding
c.gridx = 1; // aligned with button 2
c.gridwidth = 2; // 2 columns wide
c.gridy = 2; // third row
pane.add(button, c);
}
以上便是在实际Swing编程过程中经常遇到的布局模式,此博客大部分内容来自百度,感觉总结的十分详细,所以拿出来和大家共勉,效果展示图发不上去,不知道怎么搞
分享到:
评论

相关推荐

    Swing布局管理器

    ### Swing布局管理器详解 #### 一、布局管理器概览 在Java图形用户界面编程中,Swing作为一套强大的工具包,为开发者提供了丰富的组件和功能,其中布局管理器是构建美观且易于维护的GUI应用程序的关键部分。布局...

    java swing 布局所需组件formlayout所需jar包 GUI FormLayout

    java swing 布局所需组件formlayout所需jar包 jgoodies-common-1.6.0 jgoodies-forms-1.7.2 本人在烽火期间,使用的就是FormLayout布局,简单易用、功能强大,适用于swing企业和感兴趣的Java可视化兴趣爱好者。如果...

    Swing布局与结构

    Swing布局与结构 Swing是一种Java GUI组件库,提供了丰富的用户界面组件和布局管理器。本篇文章将详细介绍Swing的结构和布局管理器的使用。 一、Swing结构 Swing结构主要包括两个部分:组件和容器。组件是用户...

    Java Swing布局管理器

    Java Swing 布局管理器 Java Swing 中的布局管理器是指在 Swing 应用程序中对组件进行布局和排列的机制。布局管理器是容器中的组件进行定位和整形的关键组件。在 Java 中,AWT 提供了五种类型的布局管理器:...

    javaSwing布局管理实例

    在Java Swing中,布局管理是至关重要的,因为它决定了组件在窗口中的排列方式和大小。本实例将深入探讨Java Swing的布局管理器及其应用。 首先,Java Swing 提供了几种内置的布局管理器,包括 FlowLayout、...

    (完整word版)Java-swing布局详解(附示例图).doc

    Java Swing 布局详解 Java Swing 是 Java 编程语言中一个功能强大且流行的图形用户界面(GUI)工具包。Swing 提供了大量的组件和布局管理器,用于构建复杂的图形用户界面。在 Swing 中,布局管理器是负责管理组件的...

    Java GUI Swing 布局管理器篇

    Java GUI Swing 布局管理器篇

    Java Swing 布局

    Java Swing布局是构建图形用户界面(GUI)时用于组织组件的重要工具。Swing提供了一系列的布局管理器,帮助开发者在窗口或容器内合理地排列和调整组件的位置与大小。了解和掌握这些布局管理器能够帮助我们创建出美观...

    swing 一个简单布局

    在这个"一个简单布局"的项目中,开发者创建了一个自定义的 Swing 布局,尽管它可能并不完美,但仍然可以作为学习和理解布局管理器工作原理的基础。 在 Swing 中,有多种内置的布局管理器,如 FlowLayout、...

    Java swing图形界面开发与案例详解_代码

    二、Swing布局管理 1. FlowLayout:流式布局,按从左到右、从上到下的顺序排列组件。 2. BorderLayout:边界布局,将区域分为北、南、东、西、中五个部分。 3. GridLayout:网格布局,将容器划分为等大小的网格,...

    Java_swing布局详解(附示例图).doc

    在Java Swing中,布局管理器是用来组织和控制窗口或组件在图形用户界面中显示的方式。它们决定了组件如何根据可用空间自动调整大小和位置。以下是几种常见的布局管理器及其特点: 1. **FlowLayout** FlowLayout是...

    java swing布局管理器实例之gridbaglayout,实现左右选择框.doc

    Java Swing 是一个用于构建图形用户界面(GUI)的框架,其中布局管理器是控制组件在窗口中排列的关键工具。在众多的布局管理器中,`GridBagLayout` 是最为灵活,但也最为复杂的。它允许开发者精确地控制组件的位置和...

    关于Swing的布局

    ### Swing布局管理器简介 Swing的布局管理器负责组件的排列和大小设置,不同的布局管理器有不同的布局规则,例如FlowLayout会将组件水平放置在同一行内,而BorderLayout则按照北、南、东、西、中心五个位置进行布局...

    java swing 布局管理

    在Swing中,布局管理是构建用户界面时的关键部分,它决定了组件在窗口中的排列方式和大小。布局管理器自动处理了窗口大小变化时组件的位置调整,使得开发者可以更专注于应用逻辑而不是细节的布局设计。 ### 1. 布局...

    Swing布局,控件及事件的用法

    详细介绍swing 控件,包括布局,几乎所有控件使用,事件等.....

    java swing MigLayout

    比较好用的java布局管理器,特别注明:只适用于swing,使用时把jar导入项目即可,具体使用方法和布局参数自行度娘

    Java Swing布局管理器GridLayout例子.doc

    在Swing中,布局管理器是一个关键概念,它负责自动安排组件的位置和大小,以适应窗口的变化。`GridLayout` 是Swing提供的一种布局管理器,它将容器划分为固定的网格,并将组件按顺序放入这些网格中。 `GridLayout` ...

    JAVA swing布局管理器实例解析

    JAVA swing布局管理器实例解析 JAVA swing布局管理器实例解析是JAVA中一个非常重要的概念,对于学习JAVA的人来说具有非常重要的参考价值。布局管理器是指在容器中对组件的位置和大小进行管理的对象。JAVA swing中...

    Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    Java Swing 组件布局管理器之 FlowLayout(流式布局)入门教程 Java Swing 组件布局管理器中有多种布局管理器,今天我们主要介绍 FlowLayout(流式布局),它是最简单、最基础的一个布局管理器。 FlowLayout 也称为...

Global site tag (gtag.js) - Google Analytics