Java Swing BoxLayout
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); } }
更多建议: