Java Swing BoxLayout

2018-01-09 19:23 更新

Java Swing教程 - Java Swing BoxLayout


BoxLayout在一个容器中将组件水平排列在一行或垂直在一列。

以下步骤显示如何使用BoxLayout。

首先,创建一个容器

JPanel hPanel   = new JPanel();

然后,创建一个BoxLayout类的对象。当创建BoxLayout对象时,我们需要传递容器的构造函数。除了容器我们还传递了布局方向盒,水平或垂直于其构造函数。

该类有四个常量:X_AXIS,Y_AXIS,LINE_AXIS和PAGE_AXIS。常量X_AXIS创建一个水平BoxLayout它从左到右排列所有组件。

常量Y_AXIS用于创建垂直BoxLayout,从顶部到底部显示所有组件。

常量Y_AXIS用于创建垂直BoxLayout,从顶部到底部显示所有组件。...

以下代码显示了如何创建BoxLayout从左到右布置组件。

BoxLayout  boxLayout  = new BoxLayout(hPanel, BoxLayout.X_AXIS);

以下代码显示了如何创建BoxLayout从左到右布置组件。...

hPanel.setLayout(boxLayout);

最后,将组件添加到容器。

hPanel.add(new JButton("Button  1"));
hPanel.add(new JButton("Button  2"));

完整的源代码。

import java.awt.BorderLayout;
import java.awt.Container;
/*from  w w  w.  j av a2  s  .  c  o m*/
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("BoxLayout  Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();

    JPanel hPanel = new JPanel();
    BoxLayout boxLayout = new BoxLayout(hPanel, BoxLayout.X_AXIS);
    hPanel.setLayout(boxLayout);

    for (int i = 1; i <= 5; i++) {
      hPanel.add(new JButton("Button  " + i));
    }

    contentPane.add(hPanel, BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
  }
}

BoxLayout尝试为水平布局中的所有组件给定首选宽度,并在中选择首选高度垂直布局。

在水平布局中,最高分量的高度被给予所有其他分量。

在垂直布局中,BoxLayout尝试为所有组件指定首选高度,然后尝试以使所有组件的大小与最宽组件的宽度相同。

我们可以通过使用setAlignmentX()方法或setAlignmentY()方法更改组件的对齐方式或容器的对齐方式来更改默认对齐方式。



javax.swing包包含一个Box类,使得使用BoxLayout更容易。

Box是一个使用BoxLayout作为其布局管理器的容器。

Box类提供了静态方法createHorizontalBox()和createVerticalBox()以创建具有水平或垂直布局的容器。

下面的代码显示了如何使用Box容器。

// Create a  horizontal box
Box hBox = Box.createHorizontalBox();

// Create a  vertical box
Box vBox = Box.createVerticalBox();

要向Box添加组件,请使用其add()方法

hBox.add(new JButton("Button 1"); 
hBox.add(new JButton("Button 2");

Box类允许我们创建不可见的组件来调整两个组件之间的间距。它提供了四种类型的不可见组件:

  • Glue
  • Strut
  • Rigid Area
  • Filler

胶水是一种看不见的可膨胀组件。 我们可以使用Box类的createHorizontalGlue()和createVerticalGlue()静态方法创建水平和垂直粘合。

以下代码在水平框布局中的两个按钮之间使用水平粘贴。

Box hBox = Box.createHorizontalBox(); 
hBox.add(new  JButton("First")); 
hBox.add(Box.createHorizontalGlue()); 
hBox.add(new  JButton("Last"));

我们还可以使用Box类的createGlue()静态方法创建一个粘合组件,它可以水平和垂直扩展。

支柱是固定宽度或固定高度的不可见组件。

createHorizontalStrut()方法创建一个水平strut,以像素的宽度为参数。 createVerticalStrut()方法创建一个垂直的strut,以像素的高度为参数。

以下代码显示了如何向水平框添加100px支柱

hBox.add(Box.createHorizontalStrut(100));

刚性区域是尺寸保持不变的不可见组件。

createRigidArea()Box类的静态方法,它需要一个Dimension对象来指定它的宽度和高度,创建一个刚性区域。

以下代码将一个10 x 5的刚性区域添加到水平框中。

hBox.add(Box.createRigidArea(new  Dimesnion(10, 5)));

填充程序是一个不可见的自定义组件,我们可以通过指定自己的最小,最大和首选大小来创建。

Box类的Filler静态嵌套类表示填充。

下面的代码创建一个填充,它像胶水一样。胶水只是一个填充物,最小和首选大小设置为零,最大大小设置为Short.MAX_VALUE在两个方向。

Dimension  minSize  = new Dimension(0, 0); 
Dimension  prefSize = new Dimension(0, 0);
Dimension  maxSize  = new Dimension(Short.MAX_VALUE,   Short.MAX_VALUE); 
Box.Filler filler = new Box.Filler(minSize, prefSize,  maxSize);

以下代码创建了10x10的刚体区域:

Dimension  d  = new Dimension(10, 10);
JComponent rigidArea = new Box.Filler(d, d, d);

完整的源代码。

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("BoxLayout with Glue");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Container contentPane = frame.getContentPane();
    Box hBox = Box.createHorizontalBox();
    hBox.add(new JButton("First"));
    hBox.add(new JButton("Previous"));
    hBox.add(Box.createHorizontalGlue());
    hBox.add(new JButton("Next"));
    hBox.add(new JButton("Last"));

    contentPane.add(hBox, BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
  }
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号