我想创建一个带有建议列表的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)
通常它有效,我不明白doc中有错误? http://www.jdocs.com/swingx/1.0/org/jdesktop/swingx/autocomplete/AutoCompleteDecorator.html
感谢您的帮助。
答案 0 :(得分:2)
鉴于此处的代码:
抛出异常的行是:
getTextComponent().setText(stringConverter.getPreferredStringForItem(list.getSelectedValue()));
在这种情况下,stringConverter
为空。这解决了这个问题:
AutoCompleteDecorator.decorate(list, jtf, ObjectToStringConverter.DEFAULT_IMPLEMENTATION);
如果您还没有看过,请看一下这篇文章: