Java Swing BoxLayout

2018-01-09 19:23 更新

Java Swing教程 - Java Swing BoxLayout


BoxLayout在一個(gè)容器中將組件水平排列在一行或垂直在一列。

以下步驟顯示如何使用BoxLayout。

首先,創(chuàng)建一個(gè)容器

JPanel hPanel   = new JPanel();

然后,創(chuàng)建一個(gè)BoxLayout類的對象。當(dāng)創(chuàng)建BoxLayout對象時(shí),我們需要傳遞容器的構(gòu)造函數(shù)。除了容器我們還傳遞了布局方向盒,水平或垂直于其構(gòu)造函數(shù)。

該類有四個(gè)常量:X_AXIS,Y_AXIS,LINE_AXIS和PAGE_AXIS。常量X_AXIS創(chuàng)建一個(gè)水平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包包含一個(gè)Box類,使得使用BoxLayout更容易。

Box是一個(gè)使用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)整兩個(gè)組件之間的間距。它提供了四種類型的不可見組件:

  • Glue
  • Strut
  • Rigid Area
  • Filler

膠水是一種看不見的可膨脹組件。 我們可以使用Box類的createHorizontalGlue()和createVerticalGlue()靜態(tài)方法創(chuàng)建水平和垂直粘合。

以下代碼在水平框布局中的兩個(gè)按鈕之間使用水平粘貼。

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

我們還可以使用Box類的createGlue()靜態(tài)方法創(chuàng)建一個(gè)粘合組件,它可以水平和垂直擴(kuò)展。

支柱是固定寬度或固定高度的不可見組件。

createHorizontalStrut()方法創(chuàng)建一個(gè)水平strut,以像素的寬度為參數(shù)。 createVerticalStrut()方法創(chuàng)建一個(gè)垂直的strut,以像素的高度為參數(shù)。

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

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

剛性區(qū)域是尺寸保持不變的不可見組件。

createRigidArea()Box類的靜態(tài)方法,它需要一個(gè)Dimension對象來指定它的寬度和高度,創(chuàng)建一個(gè)剛性區(qū)域。

以下代碼將一個(gè)10 x 5的剛性區(qū)域添加到水平框中。

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

填充程序是一個(gè)不可見的自定義組件,我們可以通過指定自己的最小,最大和首選大小來創(chuàng)建。

Box類的Filler靜態(tài)嵌套類表示填充。

下面的代碼創(chuàng)建一個(gè)填充,它像膠水一樣。膠水只是一個(gè)填充物,最小和首選大小設(shè)置為零,最大大小設(shè)置為Short.MAX_VALUE在兩個(gè)方向。

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);
  }
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號