java - JTabbedPane - 选项卡更改后聚焦最后一个聚焦组件

标签 java swing focus jtabbedpane

更改选项卡时,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/

相关文章:

c# - 如何通过箭头键禁用焦点更改

java - 如何重置字段中的用户名?

java - 无法阻止用户使用带有自定义 UserDetail 和 AuthenticationProvider 的 spring security 多次登录

java - 无法理解的运行时错误

Java GUI 锁定 - boolean 值未按预期工作?

java - 在不同的时间画框?

javascript - IE11+ => 聚焦子 div 导致父滚动到顶部

java - 从java代码创建一个jar文件

java - JTable中如何控制焦点

android - 使用 android camera2 API 手动对焦