我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给
DefaultComboBoxModel model = (DefaultComboBoxModel)getModel();
model.removeAllElements();
或者
model.addElement(Object);
或者
model.insertElementAt(Object,int)
我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。
这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到的:
at javax.swing.JComboBox.fireItemStatehanged(Unknown source)
at javax.swing.JComboBox.selectedItemChanged(Unknown source)
at javax.swing.JComboBox.contentsChanged(Unknown source)
at javax.swing.JComboBox.fireContentsChanged(Unknown source)
at javax.swing.JComboBox.setSelectedItem(Unknown source)
at javax.swing.JComboBox.addElement(Unknown source)
在更新模型之前和模型更新之后,我已经尝试使用setSelectedIndex(-1),但还是出现了同样的问题。我想有我的定制模型是正确的选择。
问题是如何实现我的自定义组合框模型?我只是扩展DefaultComboBoxModel吗?我必须覆盖DefaultComboBoxMode中的所有方法吗?
以下是我目前掌握的情况。但是如果你看到下面,我没有引用实际的向量列表来删除这个项目。如果我在我的自定义AutocompleteComboBoxModel中声明了一个Vector列表字段,那么我需要重写所有方法以避免其他SWING代码引用超类中的Vector吗?
请记住,我的目标是永远不允许模型自动调用setSelectedItem(Object),因为这似乎会导致问题,除非有更好的方法。
public class AutocompleteComboBoxModel extends DefaultComboBoxModel{
public void removeElementAt(int index){
list.removeElementAt(index);
fireIntervalRemoved(this, index, index);
}
}
这也是我如何调用执行模型操作的方法:
public class AutocompleteDocumentListener implementts DocumentListener{
JTextField tf;
public AutocompleteDocumentListener (JTextfield tf){
this.tf = tf;
}
@Override
public void changedUpdate(DocumentEvent e){
}
@Override
public void insertUpdate(DocumentEvent e){
update();
}
@Override
public void removeUpdate(DocumentEvent e){
update();
}
public void update(){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
performSearch(tf.getText());//Search user input
}
)
}
}
编辑:我只想提一下,这种奇怪的行为只有在我打字非常快的时候才会发生。如果输入慢,则SWING不会自动选择随机项。那幺如果我使用Swinguties,为什么在快速打字时会出现这种情况呢。召唤者?目前,当SWING调用setSelectedItem(对象)时,该激发事件是否会在其他调用器请求之前执行?
编辑:我正在删除ItemListener但仍然不工作。然后我继续前进并删除了JComboBox KeyListeners、ActionListeners、ComponentListeners和Focus usListeners,它仍然自动选择项目。似乎在调用稍后完成后的某个时间,我看到项目被选中,可能是因为我还在JTextField上输入:
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at com.artificialmed.coderdx.encoder.TermSelectionListener.itemStateChanged(TermSelectionListener.java:23)
at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedIndex(Unknown Source)
at javax.swing.JComboBox.selectWithKeyChar(Unknown Source)
at javax.swing.plaf.basic.BasicComboBoxUI$Handler.keyPressed(Unknown Source)
at java.awt.Component.processKeyEvent(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at javax.swing.JComboBox.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
提前感谢。
添加元素(...)或insertElementAt(...)方法不应导致生成ItemStateChanged事件,因为选择不应更改。
RemveAll()元素将导致所选项目未被选中,因此生成事件是有意义的。
几个解决方案:
> < li>
仅处理“项目选择”事件。这样,当您移除所有项目时,您会忽略“取消选择项目”事件。
在状态更改时调用的逻辑中,代码应调用 getSelectedItem()。如果此值为 null,则不执行任何操作。
a) 移除侦听器,b)调用removeAll()方法,c)添加侦听器。由于调用removeAll()方法时侦听器不存在,因此不会生成任何事件。
我正在使用Spring开发一个应用程序。在Access Control Access一节中,我想使用Spring Security Acl(我是Acl的新手)。我想在我的应用程序中实现ACL基于两点: 应用程序应该具有以下五种权限:、、、和。 权限是分层的,当用户具有权限时,它应该能够,或者当用户具有权限时,它应该能够、和等。 更新: 我的应用程序是基于Spring MVC RESTful的。当用
问题内容: 作为一个例子,取子域映射。 然后,映射将如下所示: 如果我们想创建自定义的@RequestMapping属性,例如子域。创建这样的映射: 我们应该使用我们自己的实现覆盖定义并覆盖RequestMappingHandlerMapping受保护的方法 (如JIRA所述:“ 允许自定义请求映射条件SPR-7812 ”)。 这样对吗?有人可以提供提示,如何实现此功能吗? 想法1: 正如原始的j
本文:在Google App Engine上管理同一应用程序的多个域和子域,建议在筛选器上解析子域,并将变量分配给ServletRequest头。 那么映射将如下所示: 如果我们想创建自定义的@RequestMapping属性,比如subdomain,例如。要创建如下所示的映射: 也许像这样的类型和方法映射是可能的解决方案? 链接到forum.springsource.com上的相同问题
本文向大家介绍Java如何实现自定义异常类,包括了Java如何实现自定义异常类的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的
问题内容: 我解析了.yaml文件,需要以自定义方式解组其属性之一。我正在使用包裹。 有问题的属性按如下方式存储在我的.yaml文件中: 因此,它基本上是一种类型。 但是我需要在哪里定义为: 我的结构: 我试图像这样实现Unmarshaler接口: 我的问题是在函数内部未定义类型,从而在运行时导致nil指针异常。 我如何在此处正确实现Unmarshaler接口? 问题答案: 由于@Volker并未
本文向大家介绍如何在jQuery中实现自定义事件?,包括了如何在jQuery中实现自定义事件?的使用技巧和注意事项,需要的朋友参考一下 自定义事件意味着您可以在jQuery中创建自己的事件。例如,创建一个自定义事件以在按下键盘上的任意键时触发警报框。 示例 您可以尝试运行以下代码以了解如何创建自定义事件,