Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Автозаполнение JComboBox


Автор: JulT 20.9.2005, 10:12
Как сделать автозаполнение в JComboBox,помогите пожалуйста,желательно с примером. smile

Автор: batigoal 20.9.2005, 10:21
Не понял, что понимается под "автозаполнением".

А вообще, о работе с комбобоксом можно почитать тут: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

Автор: JulT 20.9.2005, 10:47
Цитата(Lamer @ 20.9.2005, 10:21)
Не понял, что понимается под "автозаполнением".

А вообще, о работе с комбобоксом можно почитать тут: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

например в комбо бокс есть записи (машина, компьютер), мне нужно,чтобы при введении пользователем в комбо бокс буквы "м" сразу предлагалось слово машина,вообщем как в адресной строке браузера

Автор: batigoal 20.9.2005, 10:53
По-моему, в стандартных возможностях такого нет. Но написать самому должно быть нетрудно. Сделать лисенер на изменение текста в окошке, потом искать строку, начинающуюся с введенного значения, и выделить ее.

Автор: JulT 20.9.2005, 11:19
Помогите начать

Автор: JulT 20.9.2005, 11:50
Все разобралась,спасибо

Автор: batigoal 20.9.2005, 12:04
Так поделитесь решением - может, кому-нибудь еще пригодится.

Автор: JulT 20.9.2005, 12:29
Код

import javax.swing.*;
import javax.swing.text.*;

public class Julietta_class extends PlainDocument {
    JComboBox comboBox;
    ComboBoxModel model;
    JTextComponent editor;
    boolean selecting=false;
    public Julietta_class(final JComboBox comboBox) {
        this.comboBox = comboBox;
        model = comboBox.getModel();
        editor = (JTextComponent) comboBox.getEditor().getEditorComponent();
    }
    public void remove(int offs, int len) throws BadLocationException {
        if (selecting) return;
        super.remove(offs, len);
    }
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if (selecting) return;
        super.insertString(offs, str, a);
        Object item = lookupItem(getText(0, getLength()));
        if (item != null) {
            setSelectedItem(item);
        } else {
            item = comboBox.getSelectedItem();
            offs = offs-str.length();
            comboBox.getToolkit().beep(); 
        }
        setText(item.toString());
        highlightCompletedText(offs+str.length());
    }
    private void setText(String text) throws BadLocationException {
        super.remove(0, getLength());
        super.insertString(0, text, null);
    }
    private void highlightCompletedText(int start) {
        editor.setSelectionStart(start);
        editor.setSelectionEnd(getLength());
    }
    private void setSelectedItem(Object item) {
        selecting = true;
        model.setSelectedItem(item);
        selecting = false;
    }
    private Object lookupItem(String pattern) {
        Object selectedItem = model.getSelectedItem();
        if (selectedItem != null && startsWithIgnoreCase(selectedItem.toString(), pattern)) {
            return selectedItem;
        } else {
 
            for (int i=0, n=model.getSize(); i < n; i++) {
                Object currentItem = model.getElementAt(i);
                if (startsWithIgnoreCase(currentItem.toString(), pattern)) {
                    return currentItem;
                }
            }
        }
 
       System.out.println("Исключение '" + pattern + "'");
        return null;
    }
   
    private boolean startsWithIgnoreCase(String str1, String str2) {
        return str1.toUpperCase().startsWith(str2.toUpperCase());
    }

    private static void startMyGUI() {
        JComboBox comboBox = new JComboBox(new Object[] {"Julietta", "Juli", "Peter", "Masha", "Sveta"});
        comboBox.setEditable(true);
        JTextComponent editor = (JTextComponent) comboBox.getEditor().getEditorComponent();
        editor.setDocument(new Julietta_class(comboBox));
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(3);
        frame.getContentPane().add(comboBox);
        frame.pack(); frame.setVisible(true);
    }
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                startMyGUI();
            }
        });
    }
} 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)