java - 将自身设置为 JFrame 的默认按钮的 JButton 子类

标签 java swing jbutton

如何创建使自己成为窗口默认按钮的 JButton 的子类?

我知道指定默认按钮是在 JRootPane 上设置的,而不是按钮本身。我不想将这样的代码添加到每个窗口,而是想通过实例化 JButton 的子类“JButton_Default”来指定默认按钮。子类应找到 JRootPane 并将其自身设置为默认按钮。

我尝试在子类的构造函数中这样做。不幸的是,这种方法有效。我想这是有道理的,因为正在构建的按钮还不是表单,所以它无法找到 JRootPane。

是否有其他方法可以对这个 JButton 子类进行编程?

这是我失败的子类:

import javax.swing.*;

public class JButton_Default extends JButton {
    public JButton_Default() {
        super();
        JRootPane pane = this.getRootPane();
        pane.setDefaultButton(this);
    }
}

已解决 ------------------

下面是 JButton 子类的代码,它使自己成为添加它的窗口的默认按钮。

import javax.swing.*;

public class JButton_Default extends JButton {

    @Override
    public void addNotify() {  // Upon being added to a window, make this JButton the default button of the window.
        super.addNotify();
        SwingUtilities.getRootPane( this ).setDefaultButton( this );
    }
}

最佳答案

覆盖 JButton 类的 addNotify() 方法。我相信在将组件添加到框架时会调用此方法。或者,如果这不起作用,则将 AncestorListener 添加到按钮并监听 ancestorAdded 事件。

现在您知道组件已添加到顶级容器中,因此您可以获取根 Pane 并将按钮设置为默认按钮。

关于java - 将自身设置为 JFrame 的默认按钮的 JButton 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287145/

相关文章:

java - 扩展基本 wicket html,无需 <wicket :child/> tag

java - 线程中的死锁问题

Java JTabbedPane,更新其他选项卡 JLabel 值?

java - 多个 JButtons,Java 中的一个 Eventlistener

java - 如何将 JButton 放在 JLabel 上?

java - JTable 中的 JButton 图标/动画在按下时改变

java - 嵌套 'synchronize' : How can this synchronized Java method be refactored - and could it make any sense like this?

java - HTTPServletResponse 状态代码不在 HTTP 响应 header 中

java - 摆脱潜在的僵局

java - 如何在 Java 中使用 JScrollPane