FocusListener在可编辑的JCombobox上没有触发

时间:2013-03-21 08:18:07

标签: java swing jcombobox focuslistener

首先: 对不起,我无法提供SSCCE。我试图在一个小项目上重新创建这个问题,但没有成功,或者我应该说成功,因为它在那里工作!

所以这是我的问题: 我有一个可编辑的JCombobox,它应该通过单击编辑器组件来监听焦点事件。但事实并非如此。

这是我附加监听器的代码片段:

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

2 个答案:

答案 0 :(得分:2)

相同的代码在某些情况下导致问题而不是其他情况导致我怀疑您的代码可能没有在AWT event dispatch thread上执行。

答案 1 :(得分:1)

  • 我建议不要将FocusListener与添加到Item & DocumentListener的{​​{1}}混合,可以创建无限循环

例如,

JComboBox'es Editor