Java JButton子类,将自身设置为JFrame的默认按钮
如何创建JButton的子类,使其成为窗口的默认按钮 我知道指定默认按钮是在JRootPane上设置的,而不是按钮本身。我希望通过实例化JButton的子类“JButton_default”来指定默认按钮,而不是向每个窗口添加这样的代码。子类应该定位JRootPane并将其自身设置为默认按钮 我试着在子类的构造函数中这样做。不幸的是,这种方法是有效的。我认为这是有道理的,因为正在构建的按钮还不是一个表单,所以它无法定位JRootPane 是否有其他方法来编程这个JButton子类 下面是我失败的子类:Java JButton子类,将自身设置为JFrame的默认按钮,java,swing,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事件
现在您知道该组件已添加到顶级容器中,因此您可以获取根窗格并将按钮设置为默认按钮。覆盖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);}-----