SwingX : a One keyword and several suggestions
Asked Answered
P

1

1

I'd like to create a JTextField with a list of suggestions(Like google,netbeans....),In other words when I wrote a word in my JTextField a list is displayed ... so I tried this :

import java.awt.BorderLayout;
import java.awt.HeadlessException;
import javax.swing.*;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;

/**
 *
 * @author marwen
 */
public class Test_swingx extends JFrame {

    public Test_swingx(String title) throws HeadlessException {
        JPanel pan = new JPanel();
        pan.setLayout(new BorderLayout());
        JTextField jtf = new JTextField(20);
        String[] tab = {"marwen", "marven", "mawww", "mamma", "ddd", "dddddd", "ppppp"};
        JList list = new JList(tab); //data has type Object[]
        AutoCompleteDecorator.decorate(list, jtf);
        pan.add(jtf, BorderLayout.NORTH);
        pan.add(list, BorderLayout.CENTER);

        setTitle(title);
        setContentPane(pan);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                Test_swingx tsx = new Test_swingx("helloo swingx");
            }
        });
    }
}

but i get this error :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.jdesktop.swingx.autocomplete.ListAdaptor.valueChanged(ListAdaptor.java:76)
at javax.swing.JList.fireSelectionValueChanged(JList.java:1798)
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1812)
at    javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
at  javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
at  javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415)
at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:459)
at javax.swing.JList.setSelectedIndex(JList.java:2212)
at javax.swing.JList.setSelectedValue(JList.java:2362)
at  org.jdesktop.swingx.autocomplete.ListAdaptor.setSelectedItem(ListAdaptor.java:98)
at  org.jdesktop.swingx.autocomplete.AutoCompleteDocument.setSelectedItem(AutoCompleteDocument.java:313)

normally it works, I do not understand there is an error in the doc ? https://pirlwww.lpl.arizona.edu/resources/guide/software/SwingX/org/jdesktop/swingx/autocomplete/AutoCompleteDecorator.html

Thanks for helps.

Pineal answered 7/2, 2012 at 21:37 Comment(0)
C
2

Given the code here:

the line that throws the exception is:

getTextComponent().setText(stringConverter.getPreferredStringForItem(list.getSelectedValue()));

In this case, stringConverter is null. This solves the issue:

AutoCompleteDecorator.decorate(list, jtf, ObjectToStringConverter.DEFAULT_IMPLEMENTATION);

If you haven't seen it, take a look at this article:

Cerebellum answered 8/2, 2012 at 2:22 Comment(3)
thanks solved ^^ ,the documentation is really damn(many errors...).I have already encountered a problem because of the doc SwingX:#9170359. have you a tutorial or a good reference ? Thanks ^^Pineal
Cool, glad it worked! You may want to try Glazed Lists, see the examples in the last link.Cerebellum
the latest version is 1.6.3 (but don't know if anything changed in the autocomplete realm) @MarwenTrabelsi please consider to file issues in the swingx issue tracker when you discover anything that's wrong :-)Linus

© 2022 - 2024 — McMap. All rights reserved.