JAVA DialogのModalの設定について

このQ&Aのポイント
  • DialogのModalの設定変更で悩んでいます。はじめModalをfalseに設定したDialogを表示し、親Frame上の'Change Modal'を押すと5秒間DialogのModalがtrueに変わり、親Frameへのアクセスをガードします。最後の処理がうまくいかない問題があります。何がいけないのでしょうか?
  • JAVAのDialogのModal設定についての問題です。はじめModalをfalseに設定したDialogを表示し、親Frame上の'Change Modal'を押すと5秒間DialogのModalがtrueに変わり、親Frameへのアクセスをガードします。最後の処理が正しく動作しません。修正方法を教えてください。
  • JAVAのDialogのModal設定について質問です。はじめModalをfalseに設定したDialogを表示し、親Frame上の'Change Modal'を押すと5秒間DialogのModalがtrueに変わり、親Frameへのアクセスをガードします。しかし、最後の処理が正しく実行されません。問題の解決策を教えてください。
回答を見る
  • ベストアンサー

JAVA DialogのModalの設定について

DialogのModalの設定変更で悩んでいます。 以下にサンプルソース(文字数制限のため、不要部分を大幅カットしています)を記します。 このサンプルは、はじめModalをfalseに設定したDialogを表示し、親Frame上の"Change Modal"を押すと5秒間DialogのModalがtrueに変わり、親Frameへのアクセスをガードします。その後、Modalを再度falseに切り替え、はじめの状態へ戻すことを目的とするものなのですが、最後の処理がうまくいきません(親Frameへのアクセスがガードされっぱなしになってしまう)。 何がいけないのでしょうか? [sample] class Modal_Test_Sample extends Frame implements Runnable, ActionListener { Dialog test_dialog; Thread thread, owner_thread; Button modal_change; Modal_Test_Sample() { super("test_frame"); modal_change = new Button("model_change"); modal_change.addActionListener(this); add(modal_change) pack(); test_dialog = new Dialog(this,"test_dialog",false); test_dialog.show(); } public void actionPerformed(ActionEvent ae) { owner_thread = Thread.currentThread(); thread = new Thread(this); thread.start(); test_dialog.setModal(true); test_dialog.setVisible(false); test_dialog.setVisible(true); test_dialog.setModal(false); test_dialog.setVisible(false); test_dialog.setVisible(true); } public void run() { try { thread.sleep(5000); } catch(Exception e) { } owner_thread.interrupt(); } public static void main(String args[]) { (new Modal_Test_Sample()).show(); } }

  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

>その後、Modalを再度falseに切り替え、はじめの状態へ戻す >親Frameへのアクセスがガードされっぱなしになってしまう ダイアログが、「入力イベントを占領した状態」(※親ウインドウなどへの入力が遮断された状態)である時、 setModal(false) を呼ぶことで、 「入力イベントを占領した状態」が解除されるわけではありません。 APIリファレンス参照。 http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Dialog.html

その他の回答 (1)

  • lawson
  • ベストアンサー率44% (29/65)
回答No.2

適当なことを書きます。 まったく実現性についてはためしていないです。 単におもいついただけです。 No1さんが言うように制約上うまくいかないようであれば。 1) Dialogのオブジェクトをモーダレスにする前に Dialogそのものをシリアライズ化する。 2) デシリアライズした複製をsetModdal(false)でモーダレスにする 3) 元ダイアログとをモーダレスする。 4) 元ダイアログをvisibleをfalseにして見えなくする 5) 4)とほぼ同時に複製ダイアログをvisibleをtrueにして見えるようにする 6) 元ダイアログを廃棄する。 7) 元ダイアログを格納している参照変数に 複製ダイアログを代入して、 現在の複製ダイアログは次からは元ダイアログとして   扱うようにする。 元ダイアログの構成オブジェクトが シリアライザブルで循環参照の構造がないようで あればできるかもしれない。 一度元オブジェクトを廃棄するので、 No1さんが言うところの制約上の問題は解決されるかもしれない。 以上

関連するQ&A

  • ダイアログボックスの出し方

    Javaを勉強中の初心者なのですが、 ダイアログボックスの出し方を教えて頂きたいのです。 Java入門にサンプルがあったので、その通り入力し実行したところPCが止まっちゃいました。なぜでしょうか? それと下のサンプルの中に書いてある ユーザークラスとは何でしょうか? よろしくお願いいたします。 ーーーサンプルソースーーー import java.awt.*; public class myDialog extends Dialog{ public myDialog(Frame parent){ super(parent,"My Dialog",true); } public void init(String s){ setSize(300,150); setVisible(true); } } 作成したユーザークラスを呼び出すには次のようにします。 myDialog d; d=new myDialog(new Frame()); d.init("ウェイトの合計が100になっていません!!");

    • ベストアンサー
    • Java
  • Javaのメモリ・リークについて

    Javaのメモリ・リークについて 以下のコードはスレッド内で、無限ループをしています。 コンストラクタで呼び出し、ずっとこのままにしておいてもフリーズするか否かが知りたいです。 (jconsole.jarというツールがありますが、まだ理解に至っておりません。) ご存知の方がおられましたら教えてください。 よろしくお願いいたします。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ActioneventRoopTest extends JFrame implements Runnable, ActionListener { JButton start = new JButton(); JButton change = new JButton("切り替え"); Boolean flag = true; public static void main(String[] args) { new ActioneventRoopTest(); } public ActioneventRoopTest() { change.addActionListener(this); start.addActionListener(this); this.add(change); this.pack(); this.setVisible(true); Thread thread = new Thread(this); thread.start(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == change) { if (flag) { flag = false; } else if (!flag) { flag = true; } } } public void run() { while (true) { while (flag) { System.out.println("リンゴ"); } while (!flag) { System.out.println("ミカン"); } } } }

    • ベストアンサー
    • Java
  • java アプレットでエラー

    以下のサンプルソースをEclipse上で実行したら "アプレットは初期化されていません"というエラーになってしまいました。 //フレームウィンドウの表示/非表示を切り替える。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Sample129 extends Applet implements ActionListener { Button bt; frame fr; public void init() { bt = new Button("ウィンドウ表示"); add(bt); bt.addActionListener(this); fr = new frame("操作対象ウィンドウ"); fr.setSize(250,120); } public void actionPerformed(ActionEvent event) { //ウインドウを表示 fr.setVisible(true); } } class frame extends Frame { frame(String title) { super(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { //ウインドウを非表示 setVisible(false); } }); } public void paint(Graphics g) { g.drawString("閉じるボタンで非表示",65,65); } } ■エラー内容 java.lang.NoSuchMethodError: frame: method <init>(Ljava/lang/String;)V not found at Sample129.init(Sample129.java:17) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) どうすればこのエラーが解消できるのでしょうか。

  • jQueryUIでダイアログ作成について

    OKとキャンセルの確認ダイヤログを作成したいです。 <script> $(function() { $( "#dialog-confirm" ).dialog({ resizable: false, draggable:false, closeOnEscape:false, width:500, height:400, modal: true, buttons: { "Yes": function() { $( this ).dialog( "close" ); }, No: function() { window.location.href='http://www.yahoo.co.jp/' } } }); }); </script> 上記コードで動くのですが、 modal: true, これでダイヤログが出た時に半透明になりますよね。 これを半透明ではなく、不透明、背景がすけないようにしたいのですが、 可能でしょうか。 可能ならばやり方を教えて頂きたくよろしくお願い致します。

  • javaでアニメーションを簡単に作るには?

    5枚の絵をループでアニメーションさせたいのですが。フレームを表示させるところまでは出来たのですが、その先がよく分かりません。どのようにしてアニメーションすればいいのでしょうか? よろしくお願い致します。 package animation; import java.awt.*; import javax.swing.*; public class Animation extends JFrame implements Runnable{ Animation () { getContentPane ().setLayout (new FlowLayout ()); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); setSize (200, 300); setVisible (true); Thread th = new Thread (); th.start (); } public void start(){ } public void run(){ } /** * @param args the command line arguments */ public static void main (String[] args) { // TODO code application logic here Animation anime = new Animation (); } }

  • Javaでウィンドウ作成について

    下記のJavaのプログラムについて質問です。 ウィンドウを表示するプログラムで、本に書いてあるのを参考にしました。 しかしウィンドウを表示されません。 どうしたらウィンドウを表示できるようになりますか?。 ちなみにコメントアウトしている部分を有効にするとウィンドウが表示されます。 開発環境はEclipse3.4で、Eclipse3.4から実行しています。 もう一点、コメントアウトしているsuper()を有効にすると Eclipse3.4から下記のエラーがでます。 本に書いてある通りにしているつもりですが、これについても教えて下さい。 ”コンストラクター呼び出しは、コンストラクター内の最初のステートメントである必要があります” 以上、よろしくお願いします。 ackage test; import java.awt.Frame; public class P155 extends Frame{ public void P155(){ //super(); this.setSize(300,200); this.setVisible(true); } public static void main(String[] args) { new P155(); // Frame f= new Frame(); // f.setSize(300,200); // f.setVisible(true); } }

    • ベストアンサー
    • Java
  • javaのフレームにサイズがセットされてない?

    前回、http://okwave.jp/qa/q8069621.htmlで質問しました。 回答をもとにframe.setvisible(true)をコンストラクタの最後にするとうまくいき回答を締め切ったんですが・・・。 しかし、mainメソッドにframe.setvisible(true)を書くとフレームのタイトル部分だけとなり、 サイズがセットされないまま実行したときと同じようになってしまいます。 なぜでしょう?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0{ public static void main(String[] args) { Frame0 test=new Frame0(); test.setVisible(true); } } class Frame0 extends JFrame{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • JAVAプログラムをWEB表示させるには・・・

    import java.awt.*; import javax.swing.*; class Test { public static void main(String args[]) { Frame frm = new Frame("テスト"); frm.setLayout(null); frm.setSize(new Dimension(450,550)); frm.setVisible(true); JFormattedTextField[] array = new JFormattedTextField[45]; for(int i = 0 ;i < array.length ; i++){ array[i] = new JFormattedTextField (); frm.add(array[i]); array[i].setSize(65, 22); array[i].setLocation(121+(i%3)*66, 130+(i/3)*22); } } } フレームにいくつかのテキストを入れただけの簡単なプログラムなのですが、これをJSPでWEB表示させたいのですが・・・・なかなかうまくいかなく困ってます。色々サイトを見ているのですが、解説だとわかりにくく、サンプルコードを載せてるところを探しているのですが、それも見つかりません。JAVAプログラムをJSPでWEB表示させるには、どのような方法があるのか教えていただけないでしょうか?よろしくお願いします。

    • ベストアンサー
    • Java
  • jQueryのUIのDialogでページ遷移

    jQueryのUIのDialogを使用してログイン画面を作成しています。 http://stacktrace.jp/jquery/ui/widgets/dialog.html 何とかjQueryのUIのDialogを使用してログイン画面を表示する事ができましたが... 下記がソースコードです。 $(document).ready(function(){   $("#dialog:ui-dialog").dialog("destroy");   $("#dialog-form").dialog({     autoOpen: false,     height: "auto",     width: 350,     modal: true,     buttons: {       "ログイン": function() {         ↑       ここに記述         ↓       }     }   }); $("#dialog-form").dialog("open"); }); <DIV id="dialog-form" title="ログイン"> <FORM method="post" action="login.php"> <FIELDSET> <LABEL for="username">ユーザ名</LABEL> <INPUT type="text" name="txtUsername" id="username" class="text ui-widget-content ui-corner-all" /> <LABEL for="password">パスワード</LABEL> <INPUT type="password" name="txtPassword" id="password" value="" class="text ui-widget-content ui-corner-all" /> </FIELDSET> </FORM> </DIV> 行いたい事は下記の通りです。 1.各テキストボックスの入力チェック 2.OKの場合はページ遷移(login.php)して  ※login.htmlで入力された値(ユーザ名、パスワード)をlogin.phpに受け渡す。 3.入力エラーの場合はエラーダイアログを表示。  エラーダイアログのOKボタンをクリックして再度、ログイン入力。 箇条書きで申し訳ありませんがどのように記述すればいいのでしょうか。 また上記の処理を実現するのに参考になるサイトがありましたら教えて下さい。 情けないんですがここ1週間、これで悩んでいます。 藁をもつかむ思いで... 些細な事でも何でも構いませんので宜しくお願いします。

  • 別クラスのスレッドによるpaint()が上手くいきません!!

    たびたびすみません、、、今度は別のクラスに記述したpaint()をメインでスレッド起動しても描写されません…オーバーライドか何かしなければいけないらしい情報を探し当てた気がするのですが、いまいちよくわかりません。。どうすればいいのでしょうか? 下に自分で作ってみたソースの抜粋を書きます。 import java.awt.*; import java.awt.event.*; class test extends Frame { subclass sc = new subclass(); Thread th=new Thread(sc); public static void main(String args[]) { test t=new test(); } public test() { setTitle("Test"); setSize(300,200); setVisible(true); th.start(); //閉じる addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } class subclass extends Frame implements Runnable { int i; public void run() { for(i=0;i<100;i++) { repaint(); } try { Thread.sleep(1000); } catch(InterruptedException e){} } public void paint(Graphics g) { g.drawOval(i,i,50,50); } } (EOS) どうか教えていただける方、お願いします!!