Java JTabbedPane-更改选项卡后聚焦上次聚焦的组件

Java JTabbedPane-更改选项卡后聚焦上次聚焦的组件,java,swing,focus,jtabbedpane,Java,Swing,Focus,Jtabbedpane,更改选项卡时,JTabbedPane始终聚焦选项卡内的第一个可聚焦组件。 我如何改变它的行为,使它要么聚焦最后一个聚焦的组件,要么根本不聚焦? 事后调用requestFocus不是一个选项,因为JTabbedPane不能在错误的字段中设置焦点 基本上,它在一个内部正常工作 EventQueue.invokeLater(new Runnable() { @Override public void run() { someComponent.grabFocus()

更改选项卡时,JTabbedPane始终聚焦选项卡内的第一个可聚焦组件。 我如何改变它的行为,使它要么聚焦最后一个聚焦的组件,要么根本不聚焦?
事后调用requestFocus不是一个选项,因为JTabbedPane不能在错误的字段中设置焦点

基本上,它在一个内部正常工作

EventQueue.invokeLater(new Runnable() {

   @Override
     public void run() {
         someComponent.grabFocus();
         someComponent.requestFocus();//or inWindow
     }
});
请看:

您需要跟踪每个选项卡中有焦点的组件。然后,当选择选项卡时,需要将焦点更改为相应的组件。以下是从上面的链接中获取的代码:

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();
        }
    }
}

这是如何防止JTabbedPane在第一个字段中设置焦点的?@Markus这取决于第一个字段是否需要字段,然后是(我也无法识别字段中的组件)