[Java Swing] JComboBox trong Java – JComboBox in Java

Nội dung
Cách tạo JComboBox
Bắt sự kiện cho JComboBox

JComboBox là một đối tượng cho phép bạn lựa chọn một phần tử khi click vào mũi tên của nó. Ví dụ như ta có một JFrame chọn lá cờ từ JComboBox như sau:

JComboBox trong Java

Bây giờ chúng ta sẽ đi tìm hiểu JComboBox bằng cách tạo một JFrame giống như trên.

Cách tạo JComboBox

Để tạo được JComboBox chúng ta sử dụng các hàm khởi tạo như sau:
– JComboBox(): Tạo JComboBox chưa có dữ liệu
– JComboBox(ComboBoxModel aModel): Tạo JComboBox với Model được chỉ định
– JComboBox(E[] items): Tạo JComboBox với các phần tử nằm trong mảng E
– JComboBox(Vector items): Tạo JComboBox với các phần tử trong Vector E

Chương trình dưới đây sẽ tạo JFrame giống như đầu bài. Nó chứa main panel là một JPanel. main panel này được đặt BorderLayout và chứa JComboBox chọn nước ở PAGE_START, JLabel hiển thị cờ của nước được chọn đặt ở CENTER. Trong code dùng 2 mảng String arrFlag để lấy tên cờ ứng với tên các nước và arrCountry để hiển thị tên nước trong JComboBox.

package nguyenvanquan7826.JComboBox;

import java.awt.BorderLayout;

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class MyJComboBox extends JFrame {
	private JComboBox<String> cbbCountry;
	private JLabel lbShow;
	private String[] arrFlag = { "vn", "china", "us", "lao", "en" };
	private String[] arrCountry = { "Việt Nam", "Trung Quốc", "Mỹ", "Lào",
			"Anh" };

	public MyJComboBox() {
		// add main panel to JFrame
		add(createMainPanel());
		// set Display
		setTitle("JComboBox");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 300);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// create main panel with BorderLayout
	private JPanel createMainPanel() {
		JPanel panel = new JPanel(new BorderLayout());
		panel.setBorder(new EmptyBorder(10, 10, 10, 10));
		// add a JComboBox to top of main panel
		panel.add(cbbCountry = createComboBox(arrCountry),
				BorderLayout.PAGE_START);
		// get flag name with country is selected in JComboBox
		String flag = arrFlag[cbbCountry.getSelectedIndex()];
		// add JLabel to show flag
		panel.add(lbShow = createLabel(flag), BorderLayout.CENTER);
		return panel;
	}

	// create a JComboBox with list item in ArrayList
	private JComboBox<String> createComboBox(String[] arrItem) {
		JComboBox<String> cbb = new JComboBox<String>(arrItem);
		return cbb;
	}

	// create JLabel to show flag with
	private JLabel createLabel(String flagName) {
		JLabel lb = new JLabel(getFlag(flagName));
		return lb;
	}

	// get flag with name is flagName
	private ImageIcon getFlag(String flagName) {
		ImageIcon flag = new ImageIcon(getClass().getResource(
				"/nguyenvanquan7826/JComboBox/" + flagName + ".png"));
		return flag;
	}

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

Mặc định khi khởi tạo JComboBox, nếu có phần tử trong nó thì phần tử đầu tiên sẽ được chọn. Để xác định phần tử được chọn ta có thể dùng các phương thức getSelectedIndex() (lấy vị trí phần tử được chọn) hoặc getSelectedItem() (lấy phần tử được chọn) tùy theo cách và mục đích khác nhau. Các bạn chú ý khi lấy ảnh thì cần sửa lại đường dẫn theo đúng với nơi đặt ảnh của các bạn, ảnh của mình được đặt cùng package với file *java. (download ảnh tại đây)

JComboBox trong Java

Các bạn để ý là ở code trên chưa bắt sự kiện khi chọn các phần tử trong JComboBox nên khi chọn nước khác thì cờ không hề thay đổi.

Bắt sự kiện cho JComboBox

Để có thể bắt sự kiện khi chọn các phần tử trong JComboBox chúng ta cần addActionListener cho JComboBox. Khi đó chúng ta phải implemets Interface ActionListener và viết đè phương thức actionPerformed(ActionEvent e). Khi đó chúng ta sẽ so sánh trong phương thức này để xác định và xử lý JComboBox được tác động. Chúng ta có code hoàn chỉnh như sau:

package nguyenvanquan7826.JComboBox;

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

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class MyJComboBox extends JFrame implements ActionListener {
	private JComboBox<String> cbbCountry;
	private JLabel lbShow;
	private String[] arrFlag = { "vn", "china", "us", "lao", "en" };
	private String[] arrCountry = { "Việt Nam", "Trung Quốc", "Mỹ", "Lào",
			"Anh" };

	public MyJComboBox() {
		// add main panel to JFrame
		add(createMainPanel());
		// set Display
		setTitle("JComboBox");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 300);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// create main panel with BorderLayout
	private JPanel createMainPanel() {
		JPanel panel = new JPanel(new BorderLayout());
		panel.setBorder(new EmptyBorder(10, 10, 10, 10));
		// add a JComboBox to top of main panel
		panel.add(cbbCountry = createComboBox(arrCountry),
				BorderLayout.PAGE_START);
		// get flag name with country is selected in JComboBox
		String flag = arrFlag[cbbCountry.getSelectedIndex()];
		// add JLabel to show flag
		panel.add(lbShow = createLabel(flag), BorderLayout.CENTER);
		return panel;
	}

	// create a JComboBox with list item in ArrayList
	private JComboBox<String> createComboBox(String[] arrItem) {
		JComboBox<String> cbb = new JComboBox<String>(arrItem);
		cbb.addActionListener(this);
		return cbb;
	}

	// create JLabel to show flag with
	private JLabel createLabel(String flagName) {
		JLabel lb = new JLabel(getFlag(flagName));
		return lb;
	}

	// get flag with name is flagName
	private ImageIcon getFlag(String flagName) {
		ImageIcon flag = new ImageIcon(getClass().getResource(
				"/nguyenvanquan7826/JComboBox/" + flagName + ".png"));
		return flag;
	}

	// change flag when select items in JComboBox
	private void changeFlag() {
		lbShow.setIcon(getFlag(arrFlag[cbbCountry.getSelectedIndex()]));
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == cbbCountry) {
			changeFlag();
		}
	}

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

Đọc thêm: class JComboBox, use JComboBox