如何创建JButton的子类,使其自己成为窗口的默认按钮?JButton子类将自身设置为JFrame的默认按钮
我知道指定一个默认按钮是在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 subsclass代码已添加的窗口的按钮。
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);
}
}
另外:当按钮被添加到已经可显示的层次结构中,或者当它的层次结构可显示时,调用addNotify。无论如何,那么getRootPane()应该可以工作(如果你没有在Swing之外使用它)。 – 2011-06-09 02:06:46
感谢您的澄清。 – camickr 2011-06-09 02:12:04
工作!谢谢。这是我自己的默认按钮JButton的代码。 ----- import javax.swing。*; public class JButton_Default extends JButton { @Override public void addNotify(){//在添加到窗口时,将此JButton设置为窗口的默认按钮。 super.addNotify(); SwingUtilities.getRootPane(this).setDefaultButton(this); } } ----- – 2011-06-09 22:41:40