JDialogについて – プログラミング – Home

通知
すべてクリア

[解決済] JDialogについて


TADA
 TADA
(@TADA)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

public class SelCodeDialog extends JDialog
APanel P_A= new APanel ();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
JPanel jPanel1 = new JPanel();

public SelCodeDialog(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
}
catch(Exception ex) {
ex.printStackTrace();
}
}

public SelCodeDialog() {
this(null, ", true);
}

private void jbInit() throws Exception {
this.setSize(new Dimension(1024, 768));
this.getContentPane().setLayout(borderLayout2);
this.setResizable(false);
jPanel1.setLayout(null);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
//パネル貼り付け
P_A.setBounds(new Rectangle(0, 0, 1024, 768));//微調整
jPanel1.add(P_A, null);
jPanel1.setVisible(true);
this.validate();
}
}

環境はJBuilderです。

上記のようにダイアログにパネルを貼り付けようとしたのですが
java.lang.Error: Do not use XXX.XXXDialog.add() use XXX.XXXDialog.getContentPane
().add() instead
というエラーが出てきます。
何を意味しているのですか?
ダイアログにパネルを貼り付けることは出来ますよね。


引用未解決
トピックタグ
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

このコードの具体的にはどこでそうなるのかわかりませんけれど、

> java.lang.Error: Do not use XXX.XXXDialog.add() use
XXX.XXXDialog.getContentPane().add() instead

これは、そのメッセージのままです。

詳しい解説が必要であれば、

http://java.sun.com/j2se/1.3/ja/docs/ja/api/javax/swing/JDialog.html

あたりから JRootPane 等の解説をあわせて読めばわかるかと。

余談ですけど、
この『ペンギンは飛べるが、飛ぶとエラーになる』系のつくりは
APIの設計としてはあまりよくありませんよね。
getContentPane().add()を呼べばいいってわかってるんだったらはじめかそうしてくれればい
いのに、とか。


返信引用
TADA
 TADA
(@TADA)
ゲスト
結合: 24年前
投稿: 28
Topic starter  

PAIさん有難うございました。
解決いたしました。

余談の話がいまいち理解できないのですが(笑)。
お時間あればもう少し詳しく教えてください。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

JDKに文句つけてもしょうがないので、あくまで余談なのですが・・・

JDialog のソースを見るとわかるのですが、
自分に add すべきか、 getContentPane に add すべきかを
isRootPaneCheckingEnabled によって判別して、
わざわざ例外を投げているんです。

『RootPane はレイアウトを持っていないのだから、そこに add するのはおかしい』
という考えもあるかもしれませんけれど、
『add というメソッドが公開されているからにはできる限り add できるべきだ』
という考えもあるはずですよね。

特に、ここでは『getContentPane の結果に add すれば良い』ということがわかっているのだ
から、
エラーメッセージを吐いて終わりにするのではなくて、
JDialog の方のデフォルトの実装で getContentPane の結果に add してくれても良かったは
ずですよね。
現に remove はそうなってるっぽいし。

ペンギンは鳥類ですけど飛べません。
ですが、鳥類インターフェイスに 飛ぶ メソッドを作ってしまったからには
ペンギンの実装も、ペンギンに飛び方があるのであれば飛ぶべきだと、
そう思うわけです。

って私が思ったところで何も変わりはしませんけどね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました