先日は、お世話になりました。
再度質問をさせていただきたく思います。
JWindow、JFrameでJDialogと同等の処理をしようと自作しております。
大体はできたのですが、モーダル化ができません。
親画面でsetEnable(false)で操作できないようにし、
子画面でボタンが押されたら、dispase()するのと同時に、親画面を
setEnable(ture)にして操作可能にすることはできるのですが、
この処理では、親画面が子画面を呼び出した後も、
親画面の処理は進んでしまいますよね。
子画面でボタンが押下されるまで親画面の処理をとめるにはどのようにすればいいのでしょうか。
javaのバージョンは1.4です。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
//何の検証もない、"信頼できない"コードを書いてみました。
//どこまで正しいのかわからないので、
//仕事には使いたくない感じですが。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
class MyEQ extends EventQueue{
public void d(AWTEvent e){dispatchEvent(e);}
}
public class Demo implements ActionListener{
boolean blocking;static Frame f;
static MyEQ myEQ=new MyEQ();
{Toolkit.getDefaultToolkit().getSystemEventQueue().push(myEQ);}
public static void main(String[] args){
f=new Frame("Main Frame");
Button b=new Button("モーダルダイアログ表示");
b.addActionListener(new Demo());f.add(b);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.pack();f.setVisible(true);
}
public void actionPerformed(ActionEvent e){
System.out.println("start");
modalStart();
System.out.println("end");
}
private void eventPump(){
AWTEvent event=null;
while(blocking){
try{event=myEQ.getNextEvent();}catch(Exception e){}
myEQ.d(event);
}
}
private void modalStart(){
MyDialog d=new MyDialog("モーダルダイアログ",this);
f.setEnabled(false);d.setVisible(true);
blocking=true;eventPump();
}
void modalEnd(){
blocking=false;f.setEnabled(true);
}
}
class MyDialog extends Frame{
Demo demo;
MyDialog(String title,Demo demo){
super(title);
this.demo=demo;
Button b=new Button("(^^)");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("(^^)");
}
});
add(b);pack();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
MyDialog.this.demo.modalEnd();dispose();
}
});
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Javaプログラミングの質問になります。 ボタンを押下した時に画面遷移して 画面から戻ってきた時のi 1 2023/06/26 07:50
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(スマートフォン・携帯電話・VR) iPhone13を使用しています。 電話を切る際に、スマホを耳から離しても画面がつきません。 電源ボ 2 2023/06/16 09:22
- iPhone(アイフォーン) iPhone13について。 母がiPhone13を最近買ったのですが、 今困ってるので教えてほしいで 5 2022/12/30 22:54
- Android(アンドロイド) PayPayのアンドロイドスマホの、アカウント画面に表示されているポイントの使い方が知りたい 6 2022/05/25 16:42
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- 電子マネー・電子決済 QUICPayの登録ができない。 4 2023/06/10 10:57
- Android(アンドロイド) PayPayでアンドロイドスマホのアカウント画面の表示のポイントの使い方が知りたい 画像添付 5 2022/05/26 10:58
- Windows 95・98 スタートボタンを押した時の画面コピー 4 2022/08/31 23:14
- マウス・キーボード real vnc viewer で遠隔先で操作が出来ない。 2 2023/07/24 15:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
C#から、C++で作成したdll内の...
-
ボタンの複数割り当てについて
-
【C#】 データベース未使用での...
-
C# visibleプロパティをfalseに...
-
C#で、定数をフラグ(if文)に...
-
マウスイベント処理
-
【javaアプレット】マウスにリ...
-
JavaFXでの表内のチェックボッ...
-
LVM_SETITEMSTATEでListViewの...
-
javaの課題プログラムでどうし...
-
デスクトップマスコットのドラ...
-
javaで質問です。 文字列2023/2...
-
C言語のポインターに関する警告
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
VBAで配列の計算
-
ダブルクォーテーションを含む...
-
ダブルクォーテーションのrepla...
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
GetDIBits関数の使い方について
-
【Java】画像表示が出来ない!
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# MouseHoverを何度も呼ぶには
-
C# DataGridView列カスタマイズ
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C#でキーイベントが発生しない...
-
C#から、C++で作成したdll内の...
-
C# visibleプロパティをfalseに...
-
C# 矢印キーの取得
-
JavaFXでの表内のチェックボッ...
おすすめ情報