当前位置: 首页 > 教程 > Java Swing >

Java GroupLayout

精华
小牛编辑
137浏览
2023-03-14

1 Java GroupLayout的介绍

GroupLayout将其组件分组并将其分层放置在Container中。分组是通过Group类的实例完成的。

Group是一个抽象类,实现此Group类的两个具体类是SequentialGroup和ParallelGroup。

SequentialGroup依次将其子项依次放置,其中ParallelGroup将其子项彼此对齐。

GroupLayout类提供诸如createParallelGroup() 和createSequentialGroup() 之类的方法来创建组。

GroupLayout独立对待每个轴。即,存在代表水平轴的组和代表垂直轴的组。每个组件必须同时存在于水平和垂直组中,否则在布局期间或请求最小,首选或最大大小时会抛出IllegalStateException。

2 Java GroupLayout的内部类

内部类 描述
static class GroupLayout.Alignment 枚举ParallelGroup对齐其子级的可能方式。
class GroupLayout.Group 组为GroupLayout支持的两种类型的操作提供了基础:一个接一个地布置组件(SequentialGroup)或对齐组件(ParallelGroup)。
class GroupLayout.ParallelGroup 这是一个调整并调整其子级的组。
class GroupLayout.SequentialGroup 这是一个组,一个接一个地依次定位和调整其元素的大小。

3 Java GroupLayout的字段

方法 描述
static int DEFAULT_SIZE 指示组件或间隙的大小应用于特定范围值。
static int PREFERRED_SIZE 指示对于特定的范围值,应使用组件或间隙的首选大小。

4 Java GroupLayout的构造方法

构造方法 描述
GroupLayout(Container host) 为指定的Container创建一个GroupLayout。

5 Java GroupLayout的方法

方法 描述
void addLayoutComponent(Component component, Object constraints) 通知组件已添加到父容器。
void addLayoutComponent(String name, Component component) 通知组件已添加到父容器。
GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop) 创建并返回一个ParallelGroup,将其元素沿基线对齐。
GroupLayout.ParallelGroup createParallelGroup() 创建并返回一个具有Alignment.LEADING对齐方式的ParallelGroup。
GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment) 创建并返回具有指定对齐方式的ParallelGroup。
GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable) 创建并返回具有指定对齐和调整大小行为的ParallelGroup。
GroupLayout.SequentialGroup createSequentialGroup() 创建并返回一个SequentialGroup。
boolean getAutoCreateContainerGaps() 如果在容器和与容器接壤的组件之间自动创建了间隙,则返回true。
boolean getAutoCreateGaps() 如果自动创建组件之间的间隙,则返回true。
getHonorsVisibility() 返回在确定零件尺寸和位置时是否考虑零件的可见性。
getLayoutAlignmentX(Container parent) 返回沿x轴的对齐方式。
getLayoutAlignmentY(Container parent) 返回沿y轴的对齐方式。
maximumLayoutSize(Container parent) 返回指定容器的最大大小。

6 Java GroupLayout的案例1

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */

import javax.swing.*;
import java.awt.*;

public class GroupExample {
    public static void main(String[] args) {  
        JFrame frame = new JFrame("GroupLayout案例-小牛知识库网");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        Container contentPanel = frame.getContentPane();
        GroupLayout groupLayout = new GroupLayout(contentPanel);  
  
        contentPanel.setLayout(groupLayout);  
  
        JLabel clickMe = new JLabel("Click Here");  
        JButton button = new JButton("This Button");  
  
        groupLayout.setHorizontalGroup(  
                    groupLayout.createSequentialGroup()  
                                .addComponent(clickMe)  
                                .addGap(10, 20, 100)  
                                .addComponent(button));  
        groupLayout.setVerticalGroup(  
                     groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)  
                                .addComponent(clickMe)  
                                .addComponent(button));  
        frame.pack();  
        frame.setVisible(true);  
    }  
}  

输出结果为:

7 Java GroupLayout的案例2

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */

import java.awt.Container;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.GroupLayout.Alignment.*;
public class GroupExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("GroupLayout案例-小牛知识库网");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container myPanel = frame.getContentPane();

        GroupLayout groupLayout = new GroupLayout(myPanel);
        groupLayout.setAutoCreateGaps(true);
        groupLayout.setAutoCreateContainerGaps(true);
        myPanel.setLayout(groupLayout);

        JButton b1 = new JButton("Button One");
        JButton b2 = new JButton("Button Two");
        JButton b3 = new JButton("Button Three");

        groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup()
                .addGroup(groupLayout.createParallelGroup(LEADING).addComponent(b1).addComponent(b3))
                .addGroup(groupLayout.createParallelGroup(TRAILING).addComponent(b2)));

        groupLayout.setVerticalGroup(groupLayout.createSequentialGroup()
                .addGroup(groupLayout.createParallelGroup(BASELINE).addComponent(b1).addComponent(b2))
                .addGroup(groupLayout.createParallelGroup(BASELINE).addComponent(b3)));

        frame.pack();
        frame.setVisible(true);
    }
}  

输出结果为: