- PR -

JFrameでのモーダル化(?)の解除について

1
投稿者投稿内容
nozo
会議室デビュー日: 2004/12/02
投稿数: 5
投稿日時: 2004-12-03 00:11
こんばんわ。

親フレームにボタンを作り、そのボタンを押すと子フレームが生成されるプログラムを組んでいます。
子フレームでの操作が済むと子フレームについたボタンを押し、子フレームを終了し親フレームに操作を戻す、というものです。

子フレームの操作中は、親フレームで操作をできないようにモーダル化しています。
親フレームについているボタンを押したときに、イベント処理でsetEnabe(false);
で親フレーム自身を編集できないようにしています。
そして、子フレームのボタンを押して親フレームのモーダル化を解除しようと思っています。

質問したいのはここからです・・・
親フレームのボタンを押してモーダル化することはできたのですが、この後のモーダルの解除がどうしてもできません。
子フレームのボタンイベントの時に、setEnable(true);を返すようにしてはいるのですが
何も起きません;;
いろいろ試してはみましたが、どうすることもできず質問さえていただきました。
よろしくお願いしますm( __ __ )m
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-12-03 06:58
引用:

子フレームのボタンイベントの時に、setEnable(true);を返すようにしてはいる
のですが何も起きません;;



もちろん setEnabled(true) は親のフレームインスタンスに対して行っているのですよね?
そのようにしても駄目ならば環境によるものかもしれません(私の環境では問題無く動作可)
まずは、お使いの環境を提示してみてはいかがでしょうか。
nozo
会議室デビュー日: 2004/12/02
投稿数: 5
投稿日時: 2004-12-03 12:23
環境は
WindowsXPのHomeEditon
SDKのバージョンは
j2sdk1.4.2_06
実行環境はDOS窓です。

ソースを一応書いておきます。
親フレームのクラスをSample1、子フレームをSample2としています。
親フレームメインのところで
public static void main(String args[]){
 Sample1 sm1 = new Sample1();
sm1.setSize(1200, 900);
sm1.setVisible(true);}

としていて、親フレームのボタンのソースは

JButton bt1 = new JButton();
bt1 = new JButton("次");
bt1.addActionListener(this);
pane.add(bt1);
・・・
  イベント
public void actionPerformed(ActionEvent e)
{
Sample2 sm2 = new Sample2();
sm2.show();
setEnabled(false);
}

子フレームのソースはメインはサイズ、クラス名以外は同じです。
ボタンのソースは
JButton bt2 = new JButton();
bt2 = new JButton("終了");
bt2.addActionListener(new EndListener());
pane.add(bt2);
・・・
イベントは
class EndListener extends Sample1 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
sm1.setEnabled(false);
dispose();
}
}

としています。
仕方はわかるのですが、実際のソースが悪いのかな・・・^^;
私的には子フレームのソースがまずいのかな、と思っています;
まだまだ未熟者ですが、みなさんのご教授をよろしくお願いします。

また何か足りないことがありましたら、補足しますのでご指摘くださいm( __ __ )m




     



takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-12-03 13:36
うーん。正直、このソースでは意味が分かりません。
とりあえずSample1は一部を除いて問題ありません(一部とはボタンのインスタンス
生成部分で、何故 new を二回もせねばならないのかという疑問)

で、分からないのは、Sample2やEndListenerがSample1とどういったスコープ関係を
もっているかという部分です(省略されるのも結構なのですが、肝心の部分が欠落して
いてはどうにもなりません)
この状態では、

コード:

class EndListener extends Sample1 implements ActionListener 



何でEndListenerはSample1を継承してるの?

コード:

public void actionPerformed(ActionEvent e) 
{ 
  sm1.setEnabled(false); 
  dispose(); 
} 



sm1って何処で定義されてるの?で、その中身は?
これがもし、Sample1の参照なのだとしたら何故にsetEnabled()への引数がfalseなの?

って疑問に対し推測することも困難です。
1

スキルアップ/キャリアアップ(JOB@IT)