JComboBox là một lớp con của JComponent kết hợp text field và drop-down list cho người dùng chọn giá trị. JComboBox tạo ActionListener, ChangeListener, ItemListener khi tác động. Mặc định JComboBox không hỗ trợ sắp xếp mục, chúng ta tùy chỉnh bằng cách kế thừa DefaultComboBoxModel.
Ví dụ
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class JComboBoxSorterTest extends JFrame {
private JComboBox comboBox;
private JTextField textField;
public JComboBoxSorterTest() {
setTitle("JComboBoxSorter Test");
setLayout(new FlowLayout());
textField = new JTextField(10);
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
comboBox.addItem(textField.getText());
textField.setText("");
comboBox.showPopup();
}
});
String[] items = {"raja", "archana", "vineet", "krishna", "adithya"};
SortedComboBoxModel model = new SortedComboBoxModel(items);
comboBox = new JComboBox(model);
comboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Box box1 = Box.createHorizontalBox();
box1.add(new JLabel("Enter a name and hit enter "));
box1.add(textField);
Box box2 = Box.createHorizontalBox();
box2.add(comboBox);
add(box1);
add(box2);
setSize(375, 250);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
// Tùy chỉnh code sắp xếp mục trong JComboBox
private class SortedComboBoxModel extends DefaultComboBoxModel {
public SortedComboBoxModel() {
super();
}
public SortedComboBoxModel(Object[] items) {
Arrays.sort(items);
int size = items.length;
for (int i = 0; i < size; i++) {
super.addElement(items[i]);
}
setSelectedItem(items[0]);
}
public SortedComboBoxModel(Vector items) {
Collections.sort(items);
int size = items.size();
for (int i = 0; i < size; i++) {
super.addElement(items.elementAt(i));
}
setSelectedItem(items.elementAt(0));
}
public void addElement(Object element) {
insertElementAt(element, 0);
}
public void insertElementAt(Object element, int index) {
int size = getSize();
for (index = 0; index < size; index++) {
Comparable c = (Comparable) getElementAt(index);
if (c.compareTo(element) > 0) {
break;
}
}
super.insertElementAt(element, index);
}
}
public static void main(String[] args) {
new JComboBoxSorterTest();
}
}
Kết quả
