更改选项卡时,JTabbedPane 始终将焦点集中在选项卡内的第一个可聚焦组件。 我怎样才能改变它的行为,以便它要么聚焦最后一个聚焦的组件,要么根本不聚焦? 之后调用 requestFocus 不是一个选项,因为 JTabbedPane 绝对不能将焦点设置在错误的字段中。
最佳答案
看看:Remembering last focused component .
您需要跟踪每个选项卡中哪个组件具有焦点。然后,当选择选项卡时,您需要将焦点更改到适当的组件。以下是从上面的链接中获取的代码:
class TabbedPaneFocus extends JTabbedPane implements ChangeListener, PropertyChangeListener {
private Hashtable tabFocus;
public TabbedPaneFocus() {
tabFocus = new Hashtable();
addChangeListener(this);
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(this);
}
/*
* (non-Javadoc)
*
* @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
if ("permanentFocusOwner".equals(e.getPropertyName())) {
final Object value = e.getNewValue();
if (value != null) {
tabFocus.put(getTitleAt(getSelectedIndex()), value);
}
}
}
/*
* (non-Javadoc)
*
* @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
*/
@Override
public void stateChanged(ChangeEvent e) {
Object value = tabFocus.get(getTitleAt(getSelectedIndex()));
if (value != null) {
((Component) value).requestFocusInWindow();
}
}
}
关于java - JTabbedPane - 选项卡更改后聚焦最后一个聚焦组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747795/