JTextField中的下拉列表

时间:2009-08-01 10:42:49

标签: java swing

我知道当我在文本字段中输入一些字母时,应该从我的数据库中选取相关项目,并且应该显示为下拉列表。 例如: 我在文本字段中输入'J',在我的数据库中有{{Juby','Jaz','Jasmine','Joggy'......等名称。 这些名称应显示为列表。所以我可以从中选择一个。依此类推其他内容。 在awt中是否有任何预定义的控制? 日Thnx

3 个答案:

答案 0 :(得分:4)

为什么不使用JComboBox?默认情况下,当用户在只读组合框中键入击键并且组合框中的项目以键入的击键开始时,组合框将选择该项目。

或者您可以使用setEditable(true)将JComboBox设置为可编辑,并使用KeySelectionManager。该链接说明了使用多次击键选择JComboBox组件中的项目。

答案 1 :(得分:3)

这是实现你所要求的(我认为)的一个小例子..这个例子中的数据库是一个字符串向量。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Answer extends JFrame {
    public static final int MAXITEMS = 100;
    JPanel panel = new JPanel();
    JTextField textField = new JTextField(10);
    String[] myDataBase = { "Juby", "Jaz", "Jasmine", "Joggy", "one", "dog","cat", "parot" };
    String[] listItems;
    JList theList = new JList();

    public Answer() {
        this.add(panel);
        panel.setPreferredSize(new Dimension(500, 300));
        panel.add(textField);
        panel.add(theList);

        textField.addKeyListener(new KeyAdapter() {

            public void keyTyped(KeyEvent ke) {
                String compareString = ("" + textField.getText() + ke.getKeyChar());
                listItems = new String[MAXITEMS];

                if (compareString.trim().length() > 0 ){
                    int counter = 0;
                    for (int i = 0; i < myDataBase.length; i++) {
                        if (counter < MAXITEMS) {
                            if (myDataBase[i].length() >= compareString.length() &&
                                    myDataBase[i].substring(0, compareString.length()).equalsIgnoreCase(compareString)) {
                                listItems[counter] = myDataBase[i];
                                counter++;
                            }
                        }
                    }
                }

                theList.setListData(listItems);
            }
        });

    }

    public static void main(String[] args) {
        final Answer answer = new Answer();
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                answer.pack();
                answer.setVisible(true);
            }
        });
    }

}

答案 2 :(得分:1)

一种选择是使用GlazedLists,因为它支持auto-completion