[JavaSwing] BorderLayout

Như các bạn đã biết các Container (như JFrame, JPanel, …) dùng để chứa các control trong nó, tuy nhiên chúng lại không có hoặc có mặc định cách sắp xếp các đối tượng không như ý muốn của ta. Vì vậy chúng ta cần sử dụng các Layout để thực hiện việc này. Nói cách khác các Layout giúp chúng ta có thể sắp xếp các control trong các Container một cách hợp lý và đẹp mắt.

Nội dung
Tạo và đặt BorderLayout cho Container
Tạo khung đăng nhập với BorderLayout

BorderLayout cho phép chúng ta sắp xếp các đối tượng theo 5 vùng chính (NORTH, SOUTH, WEST, EAST và CENTER) như hình dưới đây:
BorderLayout
Ngoài ra chúng ta có thể thay bằng PAGE_START, PAGE_END, LINE_START, LINE_END, CENTER thì cũng thu được cách bố trí như vậy.

Code tạo BorderLayout

package nguyenvanquan7826.BorderLayout;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyBorderLayout extends JFrame {

	public MyBorderLayout() {
		createJFrame();
	}

	private void createJFrame() {
		setTitle("My BorderLayout");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		// set BorderLayout for JFrame
		setLayout(new BorderLayout());

		// add content
		add(new JButton("NORTH"), BorderLayout.NORTH);
		add(new JButton("WEST"), BorderLayout.WEST);
		add(new JButton("CENTER"), BorderLayout.CENTER);
		add(new JButton("EAST"), BorderLayout.EAST);
		add(new JButton("SOUTH"), BorderLayout.SOUTH);

		setLocationRelativeTo(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		new MyBorderLayout();
	}
}

Chúng ta có 2 phương thức khởi tạo Borderlayout:
– BorderLayout(): Khởi tạo BorderLayout với khoảng cách giữa các vị trí mặc định là 0.
– BorderLayout(int hgap, int vgap): Khởi tạo BorderLayout với khoảng cách giữa các vị trí được chỉ định theo chiều ngang và dọc.

Tạo khung đăng nhập sử dụng BorderLayout

Login Frame use BorderLayout
Việc chúng ta sử dụng BorderLayout là rất phổ biến cho các chương trình của chúng ta. Chẳng hạn dưới đây là ví dụ về khung đăng nhập sử dụng BorderLayout.
Khung đăng nhập sử dụng 1 JPanel là mainPanel được đặt BorderLayout, mainPanel này chứa 5 JPanel con (itemPanel) được đặt lần lượt tại 5 vị trí của BorderLayout như đã biết. Trong đó với 3 itemPanel ở vị trí WEST, EAST và CENTER thì lại có 1 GridLayout gồm 2 dòng và 1 cột.

package nguyenvanquan7826.BorderLayout;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginFrame extends JFrame {

	public LoginFrame() {
		createJFrame();
	}

	// create JFrame
	private void createJFrame() {
		setTitle("Login use BorderLayout");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 150);
		// add main panel
		add(createMainPanel());
		// display
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// create main panel
	private JPanel createMainPanel() {
		JPanel panel = new JPanel(new BorderLayout(10, 10));
		panel.add(createTitlePanel(), BorderLayout.NORTH);
		panel.add(createNamePanel(), BorderLayout.WEST);
		panel.add(createInputPanel(), BorderLayout.CENTER);
		panel.add(createStatusPanel(), BorderLayout.EAST);
		panel.add(createLoginButtonPanel(), BorderLayout.SOUTH);
		return panel;
	}

	// create title panel
	private JPanel createTitlePanel() {
		JPanel panel = new JPanel();
		panel.add(new JLabel("Login to my Blog"));
		return panel;
	}

	// create name item
	private JPanel createNamePanel() {
		JPanel panel = new JPanel(new GridLayout(2, 1, 5, 5));
		panel.add(new JLabel("User name"));
		panel.add(new JLabel("Password"));
		return panel;
	}

	// create input panel
	private JPanel createInputPanel() {
		JPanel panel = new JPanel(new GridLayout(2, 1, 5, 5));
		panel.add(new JTextField(20));
		panel.add(new JPasswordField(20));
		return panel;
	}

	// create status panel
	private JPanel createStatusPanel() {
		JPanel panel = new JPanel(new GridLayout(2, 1, 5, 5));
		panel.add(new JLabel("Wrong"));
		panel.add(new JLabel("Wrong"));
		return panel;
	}

	// create login button panel
	private JPanel createLoginButtonPanel(){
		JPanel panel = new JPanel();
		panel.add(new JButton("Login"));
		return panel;
	}

	public static void main(String[] args) {
		new LoginFrame();
	}
}

Các phần chú thích trong code đã giải thích tương đối rõ các việc chúng ta làm, chỉ lưu ý một chút là ở phần nhập PassWord chúng ta sử dụng JPasswordField.

Tham khảo thêm tại: class BorderLayout, use BorderLayout