如何創建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