выпадающий список в JTextField - PullRequest
2 голосов
/ 01 августа 2009

Я не хочу, чтобы при вводе какой-либо буквы в текстовое поле связанные с ним элементы выбирались из моей базы данных и отображались в виде раскрывающегося списка. Например: Я набрал 'J' в текстовом поле, в моей базе данных есть такие имена, как {"Juby", "Jaz", "Jasmine", "Joggy" ....} Названия тезисов должны отображаться в виде списка. Чтобы я мог выбрать один из них и так далее для других писем. Есть ли предопределенный элемент управления в AWT? Thnx

Ответы [ 3 ]

4 голосов
/ 02 августа 2009

Почему бы просто не использовать JComboBox? По умолчанию, когда пользователь вводит нажатие клавиши в комбинированном окне, доступном только для чтения, и элемент в комбинированном окне начинается с набранного нажатия клавиши, комбинированный список выбирает этот элемент.

Или вы можете установить JComboBox для редактирования, используя setEditable(true), и использовать KeySelectionManager . Ссылка объясняет выбор элемента в компоненте JComboBox несколькими нажатиями клавиш.

3 голосов
/ 01 августа 2009

Это небольшой пример реализации того, что (я думаю) вы просили ... база данных в этом примере - это вектор строк.

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);
            }
        });
    }

}
1 голос
/ 01 августа 2009

Один из вариантов - использовать GlazedLists , так как он имеет некоторую поддержку автозаполнения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...