Java AWT布局

java.awt库提供5种基本布局。 每种布局都有其自身的意义,并且它们是完全不同的。 在本文的此处,我们将讨论如何将任何布局应用于框架或面板,并简要讨论每种布局。

java.awt库中可用的5种布局是:

  1. 边框布局
  2. 网格布局
  3. GridBag布局
  4. 卡布局
  5. 流程布局

1.边框布局

BorderLayout是一种按照方向组织组件的布局。 边框布局将框架或面板分为5个部分-北,南,东,西和居中。 通过传递附加参数,可以将每个组件按特定方向排列。

BorderLayoutExample.java
package com.mkyong;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import javax.swing.JFrame;

public class BorderLayoutExample extends JFrame {

    public static void main(String[] args) {
        BorderLayoutExample a = new BorderLayoutExample();
    }

    public BorderLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        BorderLayout b = new BorderLayout();
        setTitle("Border Layout");

        setSize(300, 300);
        add(new Button("North"), BorderLayout.NORTH);
        add(new Button("South"), BorderLayout.SOUTH);
        add(new Button("East"), BorderLayout.EAST);
        add(new Button("West"), BorderLayout.WEST);
        add(new Button("Center"), BorderLayout.CENTER);

    }
}

输出量

awt-borderlayout

2.网格布局

GridLayout是排列组件的一种更有组织的方式。 它以包含均匀分布的单元格的网格形式划分框架或面板。 每个组件都添加到特定的单元格中。 组件的放置顺序直接取决于将它们添加到框架或面板的顺序。 下图显示了基于2列3行GridLayout的Frame。

构造函数GridLayout(int row,int cols)确定网格大小。

GridLayoutExample.java
package com.mkyong;

import java.awt.Button;
import java.awt.GridLayout;
import javax.swing.JFrame;

public class GridLayoutExample extends JFrame {

    public static void main(String[] args) {
        GridLayoutExample a = new GridLayoutExample();
    }

    public GridLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        GridLayout g = new GridLayout(3, 2);
        setLayout(g);
        setTitle("Grid Layout");
        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }

}

输出量

awt-gridlayout

3. GridBag布局

GridBagLayout是最灵活的布局,它提供了一种有组织但灵活的方式来排列组件。 它使开发人员可以灵活地选择组件的确切位置(在网格中),即行跨度和列跨度以及水平和垂直间距。 下图显示了GridBagLayout 。 它包含一次跨2行的Button 5。

GridBagLayoutExample.java
package com.mkyong;

import java.awt.Button;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;

public class GridBagLayoutExample extends JFrame {

    public static void main(String[] args) {
        GridBagLayoutExample a = new GridBagLayoutExample();
    }

    public GridBagLayoutExample() {
        setSize(300, 300);
        setPreferredSize(getSize());
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        GridBagLayout g = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(g);
        setTitle("GridBag Layout");

        GridBagLayout layout = new GridBagLayout();

        this.setLayout(layout);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 0;
        this.add(new Button("Button 1"), gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        this.add(new Button("Button 2"), gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.ipady = 20;
        gbc.gridx = 0;
        gbc.gridy = 1;
        this.add(new Button("Button 3"), gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        this.add(new Button("Button 4"), gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridwidth = 2;
        this.add(new Button("Button 5"), gbc);

    }
}

输出量

awt-gridbaglayout

4.卡布局

这是很少使用的布局,用于将组件彼此堆叠。 CardLayout允许组件保持彼此CardLayout ,并根据需要将任何组件切换到最前面。 用图片描述卡片的布局是没有意义的。 因此,让我们通过一个小例子来理解它。 考虑下面的代码:

mychoice.addItemListener(new ItemListener() {
         public void itemStateChanged(ItemEvent e) {
            CardLayout cardLayout = (CardLayout)(e.getTarget().getParent().getLayout());
            cardLayout.show(panel, (String)e.getItem());
         }
      });

上面的代码与带有组合框的事件侦听器相关联。 根据组合值的变化,将显示该组件。 为了创建卡片布局,您可以使用以下代码

CardLayoutExample.java
package com.mkyong;

import java.awt.Button;
import java.awt.CardLayout;
import javax.swing.JFrame;

public class CardLayoutExample extends JFrame {

    public static void main(String[] args) {
        CardLayoutExample a = new CardLayoutExample();
    }

    public CardLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        CardLayout g = new CardLayout();
        setLayout(g);
        setTitle("Card Layout");

        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }
}

输出量

awt-cardlayout

5.流程布局

顾名思义, FlowLayout是一种布局,它允许组件流到可见部分的末端。 FlowLayout基本上有助于开发响应速度更快的UI,并使组件保持自由流动的方式。 下图显示了具有6个组件的实际流布局。

由于这是框架或面板的默认布局,因此也可以在不显式应用布局的情况下工作。

FlowLayoutExample.java
package com.mkyong;

import java.awt.Button;
import java.awt.FlowLayout;
import javax.swing.JFrame;

public class FlowLayoutExample extends JFrame {

    public static void main(String[] args) {
        FlowLayoutExample a = new FlowLayoutExample();
    }

    public FlowLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        FlowLayout g = new FlowLayout();
        setLayout(g);
        setTitle("Flow Layout");
        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }
}

输出量

awt-flowlayout

结论

本文讨论了可用的AWT布局。 讨论已经非常简短地进行了。 因此,参考文献中提供了一些链接,它们可能会帮助您了解更多信息。

参考文献

  1. 布局细节
  2. 使用边框布局
  3. 使用卡布局
  4. 使用流程布局
  5. 使用GridBag布局
  6. 使用GridBag布局

翻译自: https://mkyong.com/awt/java-awt-layouts/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值