什麼是LayoutManager?Java中有哪些型別的LayoutManager?


佈局管理器使我們能夠透過確定容器內元件的大小和位置來控制在GUI窗體中視覺元件的排列方式。

LayoutManager的型別

Java中有6種佈局管理器

  • FlowLayout:它像頁面上的文字一樣排列容器中的元件。它從左到右,從上到下填充頂行。元件按照新增順序排列,即第一個元件出現在左上角。如果容器不夠寬以顯示所有元件,則會換行。可以控制組件之間的垂直和水平間距。元件可以左對齊、居中或右對齊
  • BorderLayout:它沿著容器的邊緣或中間排列所有元件,即區域的頂部、底部、右側和左側邊緣。新增到頂部或底部的元件獲得其首選高度,但其寬度將是容器的寬度;新增到左側或右側的元件獲得其首選寬度,但其高度將是容器的剩餘高度。新增到中心的元件既沒有其首選高度也沒有其首選寬度。它覆蓋容器的剩餘區域。
  • GridLayout:它將所有元件排列在一個大小相等的單元格網格中,從左到右從上到下新增它們。一個單元格只能放置一個元件,並且網格的每個區域都將具有相同的大小。調整容器大小時,所有單元格都會自動調整大小。在單元格中放置元件的順序與其新增順序相同。
  • GridBagLayout:這是一個強大的佈局,它將所有元件排列在一個單元格網格中,並在調整容器大小時保持物件的縱橫比。在這個佈局中,單元格的大小可能不同。它為元件分配一致的水平和垂直間距。它允許我們為列或行中的元件指定預設對齊方式。
  • BoxLayout:它可以垂直或水平排列多個元件,但不能同時進行這兩種排列。元件從左到右或從上到下排列。如果元件水平對齊,則所有元件的高度將相同,且等於最大尺寸元件的高度。如果元件垂直對齊,則所有元件的寬度將相同,且等於最大寬度元件的寬度。
  • CardLayout:它排列兩個或多個具有相同大小的元件。元件像紙牌一樣排列,其中所有紙牌大小相同,並且任何時候都只有頂部的紙牌可見。新增到容器中的第一個元件將保留在牌堆的頂部。左右上下邊緣的預設間距為零,紙牌元件水平或垂直顯示。

示例

import java.awt.*;
import javax.swing.*;
public class LayoutManagerTest extends JFrame {
   JPanel flowLayoutPanel1, flowLayoutPanel2, gridLayoutPanel1, gridLayoutPanel2, gridLayoutPanel3;
   JButton one, two, three, four, five, six;
   JLabel bottom, lbl1, lbl2, lbl3;
   public LayoutManagerTest() {
      setTitle("LayoutManager Test");
      setLayout(new BorderLayout()); // Set BorderLayout for JFrame
      flowLayoutPanel1 = new JPanel();
      one = new JButton("One");
      two = new JButton("Two");
      three = new JButton("Three");
      flowLayoutPanel1.setLayout(new FlowLayout(FlowLayout.CENTER)); // Set FlowLayout Manager
      flowLayoutPanel1.add(one);
      flowLayoutPanel1.add(two);
      flowLayoutPanel1.add(three);
      flowLayoutPanel2 = new JPanel();
      bottom = new JLabel("This is South");
      flowLayoutPanel2.setLayout (new FlowLayout(FlowLayout.CENTER)); // Set FlowLayout Manager
      flowLayoutPanel2.add(bottom);
      gridLayoutPanel1 = new JPanel();
      gridLayoutPanel2 = new JPanel();
      gridLayoutPanel3 = new JPanel();
      lbl1 = new JLabel("One");
      lbl2 = new JLabel("Two");
      lbl3 = new JLabel("Three");
      four = new JButton("Four");
      five = new JButton("Five");
      six = new JButton("Six");
      gridLayoutPanel2.setLayout(new GridLayout(1, 3, 5, 5)); // Set GridLayout Manager
      gridLayoutPanel2.add(lbl1);
      gridLayoutPanel2.add(lbl2);
      gridLayoutPanel2.add(lbl3);
      gridLayoutPanel3.setLayout(new GridLayout(3, 1, 5, 5)); // Set GridLayout Manager
      gridLayoutPanel3.add(four);
      gridLayoutPanel3.add(five);
      gridLayoutPanel3.add(six);
      gridLayoutPanel1.setLayout(new GridLayout(2, 1)); // Set GridLayout Manager
      gridLayoutPanel1.add(gridLayoutPanel2);
      gridLayoutPanel1.add(gridLayoutPanel3);
      add(flowLayoutPanel1, BorderLayout.NORTH);
      add(flowLayoutPanel2, BorderLayout.SOUTH);
      add(gridLayoutPanel1, BorderLayout.CENTER);
      setSize(400, 325);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String args[]) {
      new LayoutManagerTest();
   }
}

輸出

從我們的Java 教程開始學習Java。

更新於:2024年2月19日

瀏覽量:35K+

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.