powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамический поиск по jComboBox.
1 сообщений из 1, страница 1 из 1
Динамический поиск по jComboBox.
    #39324924
-Andrusha-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Помогите, пожалуйста, разобраться со следующей проблемой.
На форме есть компонент jComboBox. Он заполнен. Надо в него ручками вписывать текст. После любого нажатия на клавишу, список должен динамически перезаполнятся в зависимости, присутвует ли введенный фрагмент в элементе списка.
Получилось примерно следующее.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.text.JTextComponent;

public class TestFrame extends JFrame {

    JComboBox jComboBox1 = new JComboBox();
    Vector<String> all_CB_Items = new Vector<String>();

    public TestFrame() {
        super("Тестовое окно");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container content = getContentPane();
        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
        jComboBox1.setEditable(true);
        jComboBox1.setAlignmentX(LEFT_ALIGNMENT);
        content.add(jComboBox1);

        populateCB();
        final JTextComponent jtc = (JTextComponent) jComboBox1.getEditor().getEditorComponent();
        KeyListener kl = new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                populateCB();
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
                final String text = jtc.getText();
                for (int i = 0; i < all_CB_Items.size(); i++) {
                    if (!all_CB_Items.get(i).contains(text)) {
                        jComboBox1.removeItem(all_CB_Items.get(i));
                    }
                }
                jComboBox1.showPopup();
            }
        };
        jtc.addKeyListener(kl);

        setPreferredSize(new Dimension(240, 130));
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void populateCB() {
        jComboBox1.removeAllItems();
        jComboBox1.addItem("");
        jComboBox1.addItem("1");
        jComboBox1.addItem("12");
        jComboBox1.addItem("123");
        jComboBox1.addItem("1234");
        jComboBox1.addItem("12345");
        all_CB_Items.removeAllElements();
        all_CB_Items.add("");
        all_CB_Items.add("1");
        all_CB_Items.add("12");
        all_CB_Items.add("123");
        all_CB_Items.add("1234");
        all_CB_Items.add("12345");
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame.setDefaultLookAndFeelDecorated(true);
                new TestFrame();
            }
        });
    }
}



Образец, код которого приведен выше, работает почти правильно. При вводе символа с клавиатуры, программа ищет совпадения среди элементов списка и отсекает лишние. Но.
Ищется только по 1-у символу. Т.е. после каждого нажатия, предыдущее тексового поля списка затирается.

Подскажите, пожалуйста, возможные пути решения.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамический поиск по jComboBox.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]