【发布时间】:2013-03-10 15:51:39
【问题描述】:
首先: 抱歉,我无法提供 SSCCE。我试图在一个小项目上重现这个问题,但没有成功,或者我应该说成功,因为它在那里工作!
所以这是我的问题: 我有一个可编辑的 JCombobox,它应该通过单击编辑器组件来监听焦点事件。但事实并非如此。
这是我附加监听器的代码 sn-p:
cmbZoom.setToolTipText(locale.getString("GUI_ZoomFactor"));
cmbZoom.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 16));
cmbZoom.setPreferredSize(new Dimension(88, 29));
cmbZoom.setEditable(true);
((JTextField)cmbZoom.getEditor().getEditorComponent()).setHorizontalAlignment(JTextField.CENTER);
cmbZoom.getEditor().getEditorComponent().addFocusListener(
new FocusListener(){
public void focusGained(FocusEvent arg0) {
System.out.println("GAINED");
}
public void focusLost(FocusEvent arg0) {
System.out.println("LOST");
}
});
我已经尝试删除组合框上的所有其他侦听器,删除观察者模式,使组合框受到保护并将侦听器附加到每个子项上,...
我也尝试过重新实现它,就像写在这篇文章中一样: JCombobox focusLost is not firing-why is that?
有没有调试事件的好方法?
整个项目可以在 Github 上查看: https://github.com/nexxx/Database-Analyzer
工具栏类可以在这里找到(代码从第 98 行开始): https://github.com/nexxx/Database-Analyzer/blob/master/src/dba/gui/auxClasses/toolBars/ToolBar.java
【问题讨论】:
-
同一代码在某些情况下会导致问题但在其他情况下不会导致问题的事实使我怀疑您的代码可能未在AWT event dispatch thread上执行。
-
@VGR 非常感谢!这就是问题所在!你能写一个答案,我可以把它标记为已解决。
-
顺便说一句:找到代码中的错误是你的工作(这是工作小例子和真实事物之间的区别),所以在这里倾倒你所有的代码就赢了没有太大作用。好的一面是:每次挖掘你都会变得更好:-)
标签: java swing jcombobox focuslistener