我有一个JList
,在某些面板层次结构中,我无法通过键UP和DOWN事件更改选择,并注意到我没有得到任何关键事件,所以我开始通过添加这些行来JList
调查我的层次结构的焦点管理Swing
:
mJList.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("focusLost to "+e.getOppositeComponent());
//mJList.requestFocus();
}
@Override
public void focusGained(FocusEvent e) {
System.out.println("focusGained");
}
});
一开始,我注意到我的一些按钮在获得焦点几毫秒后获得焦点JList
,所以我使所有这些按钮都无法获得焦点,然后我得到了这个奇怪的结果,我JList
的焦点失去了... null ?!? !
focusGained
focusLost to null
然后我添加了在 focusLost 方法中注释掉的行,以便在它丢失时重新获得焦点,但我认为从长远来看这是一个非常糟糕的解决方案,所以我的问题是:
- 为什么我
JList
只有一个时间焦点,如果不是这样,那为什么要被迫放弃它null
呢? - 如何以正确(良好的做法)的方式修复它?