【发布时间】:2013-03-22 22:21:22
【问题描述】:
我正在编写一个自定义 JComboBox,每当用户键入内容时,我都想更新 JComboBox 的下拉菜单。我遇到的问题是,一旦我的 DocumentListener 看到更新,当我尝试将项目添加到列表时就会收到错误消息。 这是一个不起作用的基本示例:
public class InputField extends JComboBox<String> implements DocumentListener{
//when something is typed, gets suggestions and adds them to the popup
@Override
public void insertUpdate(DocumentEvent ev) {
try{
giveSuggestions(ev);
}
catch(StringIndexOutOfBoundsException e){
}
}
private void giveSuggestions(DocumentEvent ev){
this.addItem("ok");
}
这实际上不是我的程序的工作方式(我不只是在每次有人键入内容时都添加 OK),但让它工作将允许我以它需要的工作方式实现我的自定义 JComboBox。提前感谢您的帮助。
编辑:我得到的错误信息是:
线程“AWT-EventQueue-0”java.lang.IllegalStateException 中的异常:尝试在通知中变异
【问题讨论】:
-
1) 为了更好地帮助我们,请发布您的完整错误消息。您是否正在尝试从 DocumentListener 内部更改 Document?如果是这样,API 会告诉你你不能这样做(不是直接),而且真的不应该这样做。 2) 不,不,对空的 catch 块不。 3)我也想知道你真正想要使用的是 DocumentFilter。 4) 为了真正最好地帮助我们,请创建并发布sscce,向我们展示您正在尝试做的事情。
-
您正在尝试更改其侦听器中的 Document,正如 @HovercraftFullOfEels 所指出的那样,您不应该这样做。
-
@HovercraftFullOfEels 好的,我已经添加了错误消息。我知道 API 说我不应该这样做,但我没有尝试编辑其更改提醒 DocumentListener 的文本,我正在尝试更新列表,这不是一回事。
-
@hd1 我知道不应该这样做,尽管我不明白为什么。如果是这种情况,我应该如何在每次更改可编辑字段时更改下拉列表?
-
再次考虑创建和发布sscce。我们不想看到整个程序,而且我们很难根据代码 sn-ps 和描述找出问题所在。我要的是一个很小的新程序,它试图做的只是你上面描述的——修改相关 DocumentListener 中的“列表”。
标签: java swing jcombobox documentlistener