Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีทำ Auto-Complete JComboBox ใน Java


JComboBox เป็นคลาสย่อยของ JComponent เป็นการรวมของ text field และ drop-down list ให้ผู้ใช้ เลือกค่า สร้างอินเทอร์เฟซ ActionListener, ChangeListener, ItemListener เมื่อผู้ใช้กระทำกับ combo box

เราสามารถทำ auto-complete JComboBox ได้เมื่อผู้ใช้พิมพ์ค่าจากคีย์บอร์ด โดยปรับแต่ง combo box (AutoCompleteComboBox) โดย extends JComboBox

ตัวอย่าง

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class AutoCompleteComboBoxTest extends JFrame {
    private JComboBox comboBox;

    public AutoCompleteComboBoxTest() {
        setTitle("AutoCompleteComboBox");
        String[] countries = new String[] {"india", "australia", "newzealand", "england", "germany", "france", "ireland", "southafrica", "bangladesh", "holland", "america"};
        comboBox = new AutoCompleteComboBox(countries);
        add(comboBox, BorderLayout.NORTH);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

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

 // Implementation of AutoCompleteComboBox
class AutoCompleteComboBox extends JComboBox {
    public int caretPos = 0;
    public JTextField tfield = null;

    public AutoCompleteComboBox(final Object countries[]) {
        super(countries);
        setEditor(new BasicComboBoxEditor());
        setEditable(true);
    }

    public void setSelectedIndex(int index) {
        super.setSelectedIndex(index);
        tfield.setText(getItemAt(index).toString());
        tfield.setSelectionEnd(caretPos + tfield.getText().length());
        tfield.moveCaretPosition(caretPos);
    }

    public void setEditor(ComboBoxEditor editor) {
        super.setEditor(editor);
        if(editor.getEditorComponent() instanceof JTextField) {
            tfield = (JTextField) editor.getEditorComponent();
            tfield.addKeyListener(new KeyAdapter() {
                public void keyReleased(KeyEvent ke) {
                    char key = ke.getKeyChar();
                    if (!(Character.isLetterOrDigit(key) || Character.isSpaceChar(key))) return;
                    caretPos = tfield.getCaretPosition();
                    String text = "";
                    try {
                        text = tfield.getText(0, caretPos);
                    } catch (javax.swing.text.BadLocationException e) {
                        e.printStackTrace();
                    }
                    for (int i = 0; i < getItemCount(); i++) {
                        String element = (String) getItemAt(i);
                        if (element.startsWith(text)) {
                            setSelectedIndex(i);
                            return;
                        }
                    }
                }
            });
        }
    }
}

ผลลัพธ์

วิธีทำ Auto-Complete JComboBox ใน Java