Trình quản lý bố cục

**Trình quản lý bố cục** (tiếng Anh: **Layout manager**) là những thành phần phần mềm được sử dụng trong bộ công cụ widget, dùng để bố trí các thành tố điều khiển đồ họa theo vị trí tương đối của chúng mà không cần sử dụng đơn vị độ dài. Việc xây dựng bố cục thành phần theo cách này thường tự nhiên hơn so với việc xây dựng bố cục dựa trên vị trí của các thành phần theo pixel hoặc đơn vị độ dài chung, do đó, một số bộ công cụ widget phổ biến có sẵn tính năng này theo mặc định. Các bộ công cụ widget cung cấp chức năng này thường có thể phân thành hai nhóm:

* Nhóm quy định hành vi của bố cục được viết trong các container đồ họa đặc biệt. Ví dụ như XUL và bộ công cụ widget của .NET Framework (cả trong Windows Forms và XAML).
* Nhóm quy định hành vi của bố cục được viết trong trình quản lý bố cục, có thể áp dụng cho mọi container đồ họa. Ví dụ như bộ công cụ widget của Swing (một phần của Java API).

## Ví dụ

### XUL
Trong XUL, ví dụ như container vbox  dùng để xếp các thành phần lên nhau. 

```xml
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<window id="vbox example" title="Example"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<vbox>
  <button id="yes" label="Yes"/>
  <button id="no" label="No"/>
  <button id="maybe" label="Maybe"/>
</vbox>

</window>
```

Đoạn mã này hiển thị 3 nút (button) được xếp chồng lên nhau trong một hộp dọc (vertical box).

### XAML
Container DockPanel bố trí các thành phần con theo những đặc tính *Dock* của chúng.

```xml
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      WindowTitle="myDock Panel">
  <DockPanel>
      <TextBlock DockPanel.Dock="Top">Top 1</TextBlock>
      <TextBlock DockPanel.Dock="Top">Top 2</TextBlock>
      <TextBlock DockPanel.Dock="Top">Top 3</TextBlock>
      <TextBlock DockPanel.Dock="Top">Top 4</TextBlock>
  </DockPanel>
</Page>
```

Mã này hiển thị 4 khối văn bản (text block) chồng lên nhau.

### Java
Trình quản lý bố cục **** sắp xếp các thành phần theo luồng định hướng (directional flow), giống như các dòng văn bản trong một đoạn văn. Nó sắp xếp các thành phần theo chiều ngang cho đến khi không còn thành phần nào vừa nữa trên cùng một dòng, sau đó đặt chúng trên một dòng khác. Các trình quản lý bố cục khác gồm trình quản lý GridLayout sắp xếp các thành phần ở dạng lưới (grid form) và trình quản lý BorderLayout thì sắp xếp các thành phần vào năm phần của khung (frame), như: south (nam), north (bắc), west (tây), east (đông) và center (trung tâm). 

```java
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.Container;

public class Example {
    private JFrame frame;

    public Example() {
        frame = new JFrame("FlowLayout Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        frame.add((new JButton("Button 1")));
        frame.add((new JButton("Button 2")));
        frame.add((new JButton("Button 3")));
        frame.add((new JButton("Long-Named Button 4")));
        frame.add((new JButton("5")));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Example ex = new Example();
    }
}
```

Mã này hiển thị 5 nút cạnh nhau trên cùng một dòng:

## Tham khảo

## Liên kết ngoài

* Hướng dẫn thiết lập bố cục trên trang web của Oracle (ngôn ngữ Java) 
* Trình quản lý bố cục Showdown trên java.net