BoxLayout在一個容器中將組件水平排列在一行或垂直在一列。
以下步驟顯示如何使用BoxLayout。
首先,創(chuàng)建一個容器
JPanel hPanel = new JPanel();
然后,創(chuàng)建一個BoxLayout類的對象。當(dāng)創(chuàng)建BoxLayout對象時,我們需要傳遞容器的構(gòu)造函數(shù)。除了容器我們還傳遞了布局方向盒,水平或垂直于其構(gòu)造函數(shù)。
該類有四個常量:X_AXIS,Y_AXIS,LINE_AXIS和PAGE_AXIS。常量X_AXIS創(chuàng)建一個水平BoxLayout它從左到右排列所有組件。
常量Y_AXIS用于創(chuàng)建垂直BoxLayout,從頂部到底部顯示所有組件。
常量Y_AXIS用于創(chuàng)建垂直BoxLayout,從頂部到底部顯示所有組件。...
以下代碼顯示了如何創(chuàng)建BoxLayout從左到右布置組件。
BoxLayout boxLayout = new BoxLayout(hPanel, BoxLayout.X_AXIS);
以下代碼顯示了如何創(chuàng)建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()方法更改組件的對齊方式或容器的對齊方式來更改默認(rèn)對齊方式。
javax.swing包包含一個Box類,使得使用BoxLayout更容易。
Box是一個使用BoxLayout作為其布局管理器的容器。
Box類提供了靜態(tài)方法createHorizontalBox()和createVerticalBox()以創(chuàng)建具有水平或垂直布局的容器。
下面的代碼顯示了如何使用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類允許我們創(chuàng)建不可見的組件來調(diào)整兩個組件之間的間距。它提供了四種類型的不可見組件:
膠水是一種看不見的可膨脹組件。 我們可以使用Box類的createHorizontalGlue()和createVerticalGlue()靜態(tài)方法創(chuàng)建水平和垂直粘合。
以下代碼在水平框布局中的兩個按鈕之間使用水平粘貼。
Box hBox = Box.createHorizontalBox(); hBox.add(new JButton("First")); hBox.add(Box.createHorizontalGlue()); hBox.add(new JButton("Last"));
我們還可以使用Box類的createGlue()靜態(tài)方法創(chuàng)建一個粘合組件,它可以水平和垂直擴展。
支柱是固定寬度或固定高度的不可見組件。
createHorizontalStrut()方法創(chuàng)建一個水平strut,以像素的寬度為參數(shù)。 createVerticalStrut()方法創(chuàng)建一個垂直的strut,以像素的高度為參數(shù)。
以下代碼顯示了如何向水平框添加100px支柱
hBox.add(Box.createHorizontalStrut(100));
剛性區(qū)域是尺寸保持不變的不可見組件。
createRigidArea()Box類的靜態(tài)方法,它需要一個Dimension對象來指定它的寬度和高度,創(chuàng)建一個剛性區(qū)域。
以下代碼將一個10 x 5的剛性區(qū)域添加到水平框中。
hBox.add(Box.createRigidArea(new Dimesnion(10, 5)));
填充程序是一個不可見的自定義組件,我們可以通過指定自己的最小,最大和首選大小來創(chuàng)建。
Box類的Filler靜態(tài)嵌套類表示填充。
下面的代碼創(chuàng)建一個填充,它像膠水一樣。膠水只是一個填充物,最小和首選大小設(shè)置為零,最大大小設(shè)置為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);
以下代碼創(chuàng)建了10x10的剛體區(qū)域:
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); } }
更多建議: