[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: JBuilder2におけるMVCモデル




> >1. JFrameにいくつかJPanelを置いて、そこへボタンを取り付けた
> >階層構造を作っても、すべてのコンポーネントのハンドルは
> >JFrameのメンバとなってしまう。
> >→JFrameに対して、自由にJPanelを取り付けたり取り外したり、
> >別のJFrameに取り付けたりしたいので、親のJPanelのメンバと
> >なって欲しいのだが、できない。
> 左側のツリーペインで、JPanelを選んで、JButtonをドロップすると
> 出来ます。

ご教示ありがとうございます。
MyJFrame の design 画面上ではなくて、MyJFrame に取り付ける
MyJPanel を先に生成して、それの desgin画面上で Buttonを
ドロップするということですね。
なるほど、出来ました。

でも、作った MyJPanel を、MyJFrameにドロップするにはどうしたら
良いのでしょう。MyJPanelのソースに
    MyJPanel mypanel1 = new MyJPanel();
    getContentPane().add(mypanel1, "CENTER");
と手書きすれば、design画面で見ることが出来るようにはなりますが。
Beanにしてツールバーに載せないと駄目なのかな。

######### 
> >2. ボタンに対するアクションの実体をコーディングするメソッhは
> >JFrameのメソッドとして出来上がってしまう。(メソッド生成先を
> >指定できない)
> >→MVCアーキテクチャで、JFrameをVIEW、データの本体をMODEL、
> >両者を取り持つものをCONTROLLERとし、アクションの実体は
> >CONTROLLERのメソッドとしてコーディングしたいのだが、できない。
> 上記と同じ理由ですね。プロジェクト・プロパティのコード・スタイルで、
> 別のアダプター・クラスに分けることは出来ます。

class MyPanel extends JPanel {
    Controller ctl = new Controller();
           :
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ctl.button1_actionPerformed(e);  // this. じゃなくて ctl.
      }
    });
というのが望み(処理本体をthisじゃなくてctlに置く)なのですが。

アダプタクラスを分けても、結局その actionPerformed()から
 adaptee.button1_action..で、MyPanelのメソッドが呼び戻されて
いるのでは意味がないのです。

#########
> JBuilderは、素直な環境です。JDK + エディタで出来ることは、
> JBuilderでもできます。

2way編集はかなりのもので、手書きで書いた部分もある程度は
拾ってくれるようですね。メンバやメソッドのツリー表示部分
についてはほとんど漏れなく拾ってくれるようで嬉しいです。

design 画面や、右側のイベントプロパティシートでは JBuilderの
方針にあわせたコーディングを強いられる点が辛いですが、
そこを諦めればば、たしかに JDK + エディタで出来ることは
JBuilderでもできるというのは納得しました。

-- 
/** 久野 浩 - Hiroshi Kuno
 * @xxxxxxxxxx       mailto:hkuno@xxxxxxxxxx
 * @xxxxxxxxxx ISO C9X, ISO C++, Java and astoronomy
 */