Java SwingX:一个关键字和几个建议

Java SwingX:一个关键字和几个建议,java,swing,autocomplete,swingx,Java,Swing,Autocomplete,Swingx,我想创建一个包含建议列表的JTextField(比如google、netbeans……),换句话说,当我在JTextField中写一个单词时,会显示一个列表。。。所以我试了一下: import java.awt.BorderLayout; import java.awt.HeadlessException; import javax.swing.*; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; /** * *

我想创建一个包含建议列表的JTextField(比如google、netbeans……),换句话说,当我在JTextField中写一个单词时,会显示一个列表。。。所以我试了一下:

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");
            }
        });
    }
}
但我得到了这个错误:

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)
正常情况下它可以工作,我不明白文档中是否有错误?

感谢您的帮助。

根据此处的代码:

引发异常的行是:

getTextComponent().setText(stringConverter.getPreferredStringForItem(list.getSelectedValue()));
在这种情况下,
stringConverter
为空。这就解决了问题:

AutoCompleteDecorator.decorate(list, jtf, ObjectToStringConverter.DEFAULT_IMPLEMENTATION);
如果您还没有看过,请看这篇文章:


谢谢解决^^,文档真的很糟糕(许多错误…)。我已经遇到了一个问题,因为文件SwingX:。你有没有教程或参考资料?谢谢^^很酷,很高兴它成功了!您可能想尝试上釉列表,见最后一个链接中的示例。最新版本是1.63.(但不知道在AutoOrthRealEnter中是否有任何更改)@ MarwenTrabelsi,当您发现任何错误时,请考虑在SWIXX问题跟踪器中提交文件: