Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton子类,将自身设置为JFrame的默认按钮_Java_Swing_Jbutton - Fatal编程技术网

Java JButton子类,将自身设置为JFrame的默认按钮

Java JButton子类,将自身设置为JFrame的默认按钮,java,swing,jbutton,Java,Swing,Jbutton,如何创建JButton的子类,使其成为窗口的默认按钮 我知道指定默认按钮是在JRootPane上设置的,而不是按钮本身。我希望通过实例化JButton的子类“JButton_default”来指定默认按钮,而不是向每个窗口添加这样的代码。子类应该定位JRootPane并将其自身设置为默认按钮 我试着在子类的构造函数中这样做。不幸的是,这种方法是有效的。我认为这是有道理的,因为正在构建的按钮还不是一个表单,所以它无法定位JRootPane 是否有其他方法来编程这个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事件

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

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


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

当按钮添加到已可显示的层次结构时,或当其层次结构可显示时,将调用添加:
addNotify
。无论如何,那么
getRootPane()
应该可以工作了(如果您没有在Swing之外使用它的话)。感谢您的澄清。这很有效!非常感谢。这是我的JButton代码,它使自己成为默认按钮。---导入javax.swing.*;公共类JButton_Default扩展JButton{@Override public void addNotify(){//添加到窗口后,将此JButton作为窗口的默认按钮。super.addNotify();SwingUtilities.getRootPane(this).setDefaultButton(this);}----添加:
addNotify
在将按钮添加到已可显示的层次结构时调用,或者在其层次结构可显示时调用。无论如何,那么
getRootPane()
应该可以工作了(如果您没有在Swing之外使用它的话)。感谢您的澄清。这很有效!非常感谢。这是我的JButton代码,它使自己成为默认按钮。---导入javax.swing.*;公共类JButton_Default扩展JButton{@Override public void addNotify(){//添加到窗口后,将此JButton作为窗口的默认按钮。super.addNotify();SwingUtilities.getRootPane(this).setDefaultButton(this);}-----