首先: 對不起,我無法提供SSCCE。我試圖在一個小項目上重新創建這個問題,但沒有成功,或者我應該說成功,因爲它在那裏工作!FocusListener上可編輯JCombobox沒有射擊
所以這裏是我的問題: 我有一個可編輯的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
事實上,相同的代碼在某些情況下導致問題而不是其他問題導致我懷疑您的代碼可能未在[AWT事件調度線程]上執行(http://docs.oracle.com/javase/tutorial/ uiswing /併發/ dispatch.html)。 – VGR 2013-03-21 08:45:21
@VGR非常感謝!這是問題!你能寫一個答案,以便我可以將其標記爲已解決。 – 2013-03-21 09:48:54
無關:[不要使用setXXSize,有史以來](http://stackoverflow.com/a/7229519/203657) – kleopatra 2013-03-21 11:13:19