JTextField的AutoCompletion开始错误 [英] JTextField AutoCompletion Error

查看:122
本文介绍了JTextField的AutoCompletion开始错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个线程,我已经找到一种方法来实现自动完成的JTextField 功能(和的JComboBox ,但这个没有问题)。

在试图实施的的JTextField 它抛出一些例外此功能。下面code将展示这个问题。它是如此简单,很多类似我的JComboBox ,这是工作的罚款使用方式。

有人可以帮助我找到一个解决这个。

这里的code:结果
请注意,我使用 swingx 的)

 进口javax.swing.JList中;
进口org.jdesktop.swingx.JXFrame;
进口org.jdesktop.swingx.JXTextField;
进口org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;公共类ErrorDemo {    公共静态无效的主要(字串[] args){
        JXFrame帧=新JXFrame(错误示范);
        JXTextField场=新JXTextField();
        的String [] =用户{AAA,BBB,CCC};
        AutoCompleteDecorator.decorate(新JList的(用户),场);        。frame.getContentPane()加(场);
        frame.pack();
        frame.setLocationByPlatform(真);
        frame.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
        frame.setVisible(真);
    }
}

这是错误消息我得到:结果
这是一个有点长:D

 异常螺纹AWT-EventQueue的-0显示java.lang.NullPointerException
    在org.jdesktop.swingx.autocomplete.ListAdaptor.valueChanged(ListAdaptor.java:76)
    在javax.swing.JList.fireSelectionValueChanged(JList.java:1765)
    在javax.swing.JList中的$ ListSelectionHandler.valueChanged(JList.java:1779)
    在javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    在javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    在javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    在javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    在javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    在javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
    在javax.swing.JList.setSelectedIndex(JList.java:2179)
    在javax.swing.JList.setSelectedValue(JList.java:2295)
    在org.jdesktop.swingx.autocomplete.ListAdaptor.setSelectedItem(ListAdaptor.java:98)
    在org.jdesktop.swingx.autocomplete.AutoCompleteDocument.setSelectedItem(AutoCompleteDocument.java:317)
    在org.jdesktop.swingx.autocomplete.AutoCompleteDocument.insertString(AutoCompleteDocument.java:265)
    在javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1358)
    在javax.swing.text.DefaultEditorKit中的$ DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
    在javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
    在javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
    在javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
    在javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
    在java.awt.Component.processEvent(Component.java:5815)
    在java.awt.Container.processEvent(Container.java:2058)
    在java.awt.Component.dispatchEventImpl(Component.java:4410)
    在java.awt.Container.dispatchEventImpl(Container.java:2116)
    在java.awt.Component.dispatchEvent(Component.java:4240)
    在java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
    在java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
    在java.awt.DefaultKeyboardFocusManager。preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
    在java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
    在java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
    在java.awt.Component.dispatchEventImpl(Component.java:4282)
    在java.awt.Container.dispatchEventImpl(Container.java:2116)
    在java.awt.Window.dispatchEventImpl(Window.java:2429)
    在java.awt.Component.dispatchEvent(Component.java:4240)
    在java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    在java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


解决方案

有没有 JList的涉及您的code。我认为它应该读这样的事情...

  org.jdesktop.swingx.autocomplete.AutoCompleteDecorator.decorate(场,Arrays.asList(用户),FALSE);

如果你要绑定一个 JList的文本字段(以便文本字段将更新的选择在 JList的)您希望装饰(JList的列表,JTextComponent的TextComponent中,ObjectToStringConverter stringConverter),而不是...

In this thread, I've found a way to implement AutoComplete feature in a JTextField (and JComboBox, but no issue with this).

When trying to implement this feature in a JTextField it throws some exceptions. The following code will demonstrate the issue. It's so simple, much similar to the way I used with JComboBox, which is working fine.

Can someone help me to find a solution to this.

Here's the code:
(Please note that i'm using swingx)

import javax.swing.JList;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXTextField;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;

public class ErrorDemo {

    public static void main(String[] args) {
        JXFrame frame = new JXFrame("Error Demo");
        JXTextField field = new JXTextField();
        String[] users = {"aaa", "bbb", "ccc"};
        AutoCompleteDecorator.decorate(new JList(users), field);

        frame.getContentPane().add(field);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

This is the error message i get :
(it's a bit long :D)

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:1765)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1779)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
    at javax.swing.JList.setSelectedIndex(JList.java:2179)
    at javax.swing.JList.setSelectedValue(JList.java:2295)
    at org.jdesktop.swingx.autocomplete.ListAdaptor.setSelectedItem(ListAdaptor.java:98)
    at org.jdesktop.swingx.autocomplete.AutoCompleteDocument.setSelectedItem(AutoCompleteDocument.java:317)
    at org.jdesktop.swingx.autocomplete.AutoCompleteDocument.insertString(AutoCompleteDocument.java:265)
    at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1358)
    at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
    at java.awt.Component.processEvent(Component.java:5815)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
    at java.awt.Component.dispatchEventImpl(Component.java:4282)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

解决方案

There is no JList involved in your code. I think it should read something like this...

        org.jdesktop.swingx.autocomplete.AutoCompleteDecorator.decorate(field, Arrays.asList(users), false);

If you want to bind a JList to a TextField (so that the text field will update the selection of the JList) you want decorate(JList list, JTextComponent textComponent, ObjectToStringConverter stringConverter) instead...

这篇关于JTextField的AutoCompletion开始错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆