[JavaSwing] JButton

Nội dung
Tạo JButton đơn giản
Các cách tạo Action
Đặt margin

JButton là một đối tượng mà cho phép chúng ta khi click chuột vào sẽ thực hiện một việc gì đó.
JButton
Ví dụ button “Tính” dưới đây, khi click chuột vào thì sẽ tính tiền lãi dựa vào các thông tin đã nhập trong các JTextField

Ví dụ 1: Tạo một JButton đơn giản

package nguyenvanquan7826.JButton;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class MyJButton extends JFrame {
	private JLabel lb;

	public MyJButton() {
		// create JFrame
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 200);
		setLayout(new GridLayout(2, 1, 5, 5));

		// create JLabel
		lb = new JLabel("My JLabel");
		lb.setHorizontalAlignment(JLabel.CENTER);
		add(lb);

		// create JButton with text "Click Button"
		JButton btn = new JButton("Click Button");
		// add action
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				changeTextJLabel();

			}
		});
		add(btn);

		// display JFrame
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// change text of lb
	private void changeTextJLabel() {
		lb.setText("You are clicked JButton");
	}

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

JButton
Một số điểm lưu ý
* Khởi tạo JButton: chúng ta có một số phương thức khởi tạo JButton
– JButton() : Tạo một Button không có text hoặc icon
– JButton(Action a) : Tạo một Button có thuộc tính được lấy từ một Action
– JButton(Icon icon) : Tạo một Button chỉ định một icon
– JButton(String text) : Tạo một Button chỉ định text
– JButton(String text, Icon icon) : Tạo một Button chỉ định text và icon
* Tạo action cho Jbutton ta sử dụng phương thức addActionListener của JButton để thực hiện việc này. Sau đó có thể tạo mới 1 ActionListener ngay trong đó như ví dụ trên. Các bạn chỉ cần viết new Action sau đó ấn Ctrl + Space (cách) NetBean hoặc Eclipse sẽ hiển thị cho các bạn danh sách các phương thức và interface, bạn chọn ActionListener() nó sẽ tự động tạo phương thức ActionPerformed() cho các bạn. Sau đó chúng ta gọi phương thức changeTextJLabel() để thay đổi text của JLabel khi ta click vào button. Lưu ý do ta tạo mới cái ActionListener ngay trong addActionListener nên không thể gọi trực tiếp setText của JLabel. Nếu muốn gọi trực tiếp ta cần gọi thông qua tên class: MyJButton.lb.setText(), tuy nhiên chúng ta ít làm theo cách này.

Ví dụ 2: Các cách tạo và bắt sự kiện JButton

package nguyenvanquan7826.JButton;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class JButtonAction extends JFrame implements ActionListener {
	private JButton btnGreen;
	private JLabel lb;

	public JButtonAction() {
		// create JFrame
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(200, 300);
		setLayout(new GridLayout(3, 1, 5, 5));

		// add JFrame content
		lb = new JLabel("Background default");
		lb.setOpaque(true);
		add(lb);

		btnGreen = createJButton("Green");
		add(btnGreen);
		add(createJButton("Blue"));

		// display JFrame
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// create JButton with text is title
	private JButton createJButton(String title) {
		JButton btn = new JButton(title);
		// add action for JButton
		btn.addActionListener(this);
		return btn;
	}

	// change text and background of JLabel when click button
	private void changeBackgroundJLabel(Color bgcolor, String nameBgcolor) {
		lb.setBackground(bgcolor);
		lb.setText("Background is " + nameBgcolor);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// click button green
		if (e.getSource() == btnGreen) {
			changeBackgroundJLabel(Color.green, "Green");
		}
		// click button blue
		if (e.getActionCommand() == "Blue") {
			changeBackgroundJLabel(Color.blue, "Blue");
		}
	}

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

action button

Trong ví dụ 2 này chúng ta tạo một JLabel và 2 JButton được đặt trong một GriLayour với 3 hàng và 1 cột. Khi click vào button “Green” hoặc “Blue” thì text và background của JLabel được thay đổi.

2 cách tạo và bắt sự kiện trong ví dụ này cũng khác hoàn toàn so với ví dụ trước. Ở đây chúng ta implements Interface ActionListener để phục vụ việc lắng nghe sự kiện. Khi implements Interface này thì chúng ta cần phải Override phương thức actionPerfomed() của nó để thực hiện việc lắng nghe sự kiện. Đối của phương thức này là 1 ActionEvent e, đây chính là sự kiện mà nó nghe được.
Để biết được chính xác button nào được ấn thì ta cần so sánh nó với các button. Đối với btnGreen, nó là 1 biến “toàn cục” của class nên ta có thể so sánh bằng cách dùng e.getSource() == btnGreen để kiểm tra, tuy nhiên với button Blue thì nó không phải vậy mà nó là một JButton được tạo trong phương thức createJButton() nên muốn kiểm tra được nó ta so sánh với nhãn text của nó bằng lệnh e.getActionCommand() == “Blue”.

Bạn lại chú ý lên phương thức createJButton() nó trả về 1 JButton. Các button được tạo bới phương thức này cần được addActionListener(this). Vì chúng ta đã implements Interface ActionListener nên phương thức này có đối là this tức là tác động đến chính cái ActionListener đó do đó mà các button có thể nghe được sự kiện.

Đặt Magin cho JButton:

Nếu text của Jbutton hơi dài quá so với kích thước của nó, bạn có thể đặt khoảng cách giữa biên của button tới text bằng cách dùng phương thức:

setMargin(new Insets(int bottom, int left, int right, int top));

VD: btn.setMargin(new Insets(0, 0, 0, 0)); text sẽ cách các biên là 0 (sát biên).

Tham khảo thêm: Class JButton, Use Button