• ベストアンサー

立て続けで申し訳在りません(JOptionPane.showMessageDialog)

連続投稿申し訳在りません。 JOptionPaneクラスで表示出来る ダイアログなのですが、これは 手動でリサイズが出来てしまうのですね。 おそらく、Compponentクラスの setSizeで初期サイズを取得して、 resizeかsetBoundsでリサイズ時の 処理を行っていると思うのですが、 これはそれぞれのメソッドで値を入れているので 一瞬はサイズが変更されたのが見えてしまいそうです。 何処か簡単にリサイズ制御出来る メソッドがありましたら教えて下さい。

  • Java
  • 回答数3
  • ありがとう数8

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

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.3

もうダイアログサイズを固定する方法は見つかりましたか? 一応このメソッドでサイズは固定出来そうだというものがありましたのでご紹介だけしておきます。 JFrame#setResizable ←フレームの場合 JDialog#setResizable ←ダイアログの場合 もしかするとJOptionPaneか、JDialogを継承して新たに 作る必要があるかもしれないとちょっと思いました。 もっとお詳しい方ならわかるかもしれませんね。 新たなことがわかりましたらまたここでお知らせできるかもしれません。 参考URLはオーバーロードとオーバーライドについての 簡単な解説が記載されています。

参考URL:
http://www.gimlay.org/~andoh/hatena/java/S011.html#S011-08
Naocky
質問者

お礼

何とかオーバーライドについて分かりました。 肝心のメソッドを見つけるのに苦労しましたが、 何とか出来るようになりました。 有難う御座います。

その他の回答 (2)

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.2

Javaはあまり詳しくはないですが。 (まして件のパッケージって何か知りません) オーバーライドは「メソッドの上書き」です。 上書きされたメソッドは、消えるわけではありませんが、 明示的に呼ばれない限り呼び出されません。 (優先順位が変わる、とでも言えばいいのかなぁ) それと、オーバーライドするのは軽少するときと決まってます。 そのクラスを継承して、そこでオーバーライドしてやれば いいんじゃないかなぁ、と思いますが。

Naocky
質問者

お礼

返事が遅れて申し訳ありません。 オーバーライドを試してみて、 何とか出来るようになりました。 有難う御座います。

  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

上記質問のみでは具体的に何を行いたいのかが見えませんので 補足をお願いいたします。 1.現在やりたいこと。 2.現在の問題点。 3.これまで行ってきた回避策。  (こうやったがだめだったとかここまでできたなど) 以上、宜しくお願いいたします。

Naocky
質問者

補足

では、一つずつ書かせて頂きます。 現在やりたい事とは JOpetionクラスのDialog表示メソッドが (showOptionDialog、showConfirmDialogなど) リサイズ出来ないようにしたいのです。 ダイアログの表示は出来るのですが、 マウスの操作でダイアログの大きさを 変更出来てしまいます。これを制御したいのです。 (Frameオブジェクトで言う resizable = falseと同様の事です) 回避策というか、今の時点では対策出来ていないのですが 調べてみると、どうやら親クラスであるComponentの setSize、或いはsetBoundでサイズを設定している らしいと言うことは分かったと言う所までです。 どちらかのメソッドをオーバーライドすれば 出来るかもしれないと思ったのですが まだオーバーライドの概念をいまいち理解出来ていないので ここで足踏みしている状態です。 何か分かりましたら教えてくださるとありがたいです。 よろしくお願いします

関連するQ&A

  • JOptionPane.showOptionDialogの不都合

    初めて投稿します。 よろしくお願いします。 現在、JDeveloperで作成しているツールがあり、 そこに幾つか入力項目を設けました。 ユーザーがそこに入力し、focusLostした時に 入力された内容が項目にそぐわない場合は エラーメッセージのダイアログを出したいのです。 JOptionPaneクラスのshowOpenDialogメソッドで 表示まで持ち込めたのですが、これを TextFieldオブジェクトからfocusLostした時に 発生させると、延々とダイアログが出続ける現象が 発生してしまいました(Buttonオブジェクトなら大丈夫) 調べて見た所、isFocusTraversableと言う 親クラスにあるメソッドでfalseを返すようにすれば 良いと書いてあったのですが、実は私、JAVAが 初めてで良く分かりません。 とりあえず以下のように書いてみたのですが…。 --- public class MsgBox extends JOptionPane { public MsgBox() {     [ダイアログを出すメソッド]  } //フォーカス制御のオーバーライド public boolean isFocusTraversable() {   return false; } --- これでは反映されません (分かる方は当然と思うでしょうが) どのように書けば上手く反映されるのでしょうか? どなたか教えてくださるととても助かります。

    • ベストアンサー
    • Java
  • 立て続けに申し訳ないです。

    店長に連絡先を渡し、待ってみましたが来なかった。 その後、気になる先輩ができ、でも店長を見るとニヤニヤというか、、 頬が緩んでしまいます。 まだ好きなんでしょうか、、?

  • java アプリケーションをjava アプレットに

    java超初学者です。詳しいかたご教授願います。 java アプリケーションをjava アプレットに書き換えたいのですが、具体的にはどう書き換えを行ったらいいのか修正をお願いします。 (文字制限があるので、14個あるクラスファイルの中で(内1つはhtmlファイル)、メインメソッドを持つ実行クラスだけのせています。) Appletを継承させる、属性をメインクラスとコンストラクタはpublic にする、 mainメソッドを削除し、initメソッドへ書き換える、サイズ指定は<applet>タグで指定する。等調べましたが 具体的にわかりません。特にコンストラクタとメインメソッドの部分のアプレットへの書き換えがわかりませんでした。 宜しくお願い致します。 //実行クラスです。 import java.awt.*; import java.awt.event.*; /** *ゲームクラス(ここから始まる)<p> *画面の作成 */ public class Game extends Frame { /** * メインクラス */ public static void main(String args[]) { //フレームの作成 new Game(); } /** * 引数なしのコンストラクタ */ Game() { //*** ウィンドウの初期化 //タイトル super("Shooting Game"); //クローズボタンによる終了処理の実装 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); setSize(500, 500); //ウィンドウのサイズ //*** キャンバスの初期化 MyCanvas mc = new MyCanvas(); add(mc); //フレームにキャンバスを追加 setVisible(true); //ウィンドウの表示 //ゲームデータの初期化 mc.init(); //スレッドを作成 mc.initThread(); } }

  • java ソート

    java ソート ソートプログラムを作ってみましょう ? double型の配列とメソッドを持つクラスを定義 ? コンストラクタで配列を初期化(0.0で初期化) ?配列を昇順,降順に並び替えるメソッドを持つこと ? 2種類のメソッドを持っても良い ? 引数の値で変えても良い ? ソート済み配列をチェックするメソッドを持つこと ? 1000000要素程度のソーティングで時間計測 課題です 全く手が出せず困ってます・・・。 ヒント、手順、解答 なんでも良いので、救いの手をお願いします!!

  • ダイアログクラスへの値の受け渡し

    VC++6.0 ダイアログベースです。 下記のように、親ダイアログクラスから、ボタンコントロールで2つの子ダイアログクラスを呼び出して いるのですが、自作で作った処理用のクラスを子ダイアログ2から呼び出す場合に 上手く値を渡すことが出来ません。 子ダイアログ2に設定値を送り、その送られてきた設定値を使って自作クラスに値を送ろうと考えてみたのですが、 Dialog2->DoModal(); でエラーとなります。 どの用にしたら、子ダイアログ2から自作関数を呼び出した時も、ダイアログ1で設定された値を使うことができるでしょうか? よろしくお願いします。 /**親ダイアログクラス***********************************************************:*/   //■ボタン1が押されたら子ダイアログ1を開く  CDialog1 *Dialog1;    Dialog1 = new CDialog1();    Dialog1->DoModal();//子ダイアログクラス1呼び出し     //■ボタン2が押されたら子ダイアログ2を開く    CDialog2 *Dialog2;    if (Dialog1->flag == 1){      Dialog2 = new CDialog2(Dialog1->m_hoge1,Dialog1->m_hoge2,Dialog1->m_hoge3);  else{       Dialog2 = new CDialog2(0,0,0);//設定値が読み込まれていなかったら初期値を送る  }      Dialog2->DoModal();//子ダイアログクラス2呼び出し   //■ボタン3が押されたら自作クラスを呼び出します。    //自作クラスを呼び出します。  CJisaku *jisaku;    jisaku = new CJisaku();    //自作クラスの関数呼び出し    jisaku->ppfm(Dialog1->m_hoge1,Dialog1->m_hoge2,Dialog1->m_hoge3,);     /**子ダイアログクラス1**********************************************************/   //自作クラスで扱う設定値を決めます   public:    int m_hoge1;//呼び出されたらint型の変数m_hoge1に値を入れる。   int m_hoge2;//呼び出されたらint型の変数m_hoge2に値を入れる。   int m_hoge3;//呼び出されたらint型の変数m_hoge3に値を入れる。   Cstring m_hogestring;//呼び出されたらCstring型の変数m_hogestringに値を入れる。 BOOL m_flag;   //初期値 flag = false;   //一度でも呼び出されたら flag = true; /**子ダイアログクラス2********************************************************/   //自作クラスを呼び出します。   //コンストラクタ Dialog2::Dialog2(int a,int b, int c){    m_a = a;    m_b = b;    m_c = c; }   jisaku = new CJisaku();   jisaku->ppfm(m_a,m_b,m_c);//自作クラスの関数呼び出し /**自作クラス*******************************************************************/   void ppfm(int a,int b, int c)   {   //ここで子ダイアログクラス1で設定した値を使いたい。   }

  • JavaScriptからJAVAクラスを呼び出す

    JavaScriptからJavaクラスのメソッドやコンストラクタを呼び出す事ってできるのでしょうか? 今、行おうとしているのが、テキストにて入力した後に日付編集(4200812 → H20. 8. 12に変換)処理を行うというものです。 初期表示時は、Javaクラスで変換して表示させるので、大丈夫なのですが、どうしても入力したタイミングで変換させるには、JavaScriptを使用しなければなりません。 そこで、JavaScriptに元号情報やJavaで記述した制御などを記載すればできると思いますが、面倒臭いので、JavaScriptからJavaクラスのメソッドが実行できればなと思います。 そのような事はできるのでしょうか?? JDKは1.6です。

  • c# Moveイベなしで子コントロールの移動を感知

     こんにちは。c#初心者です。  今までは子コントロールが移動した事を知るためにはMoveイベントを使ってきたのです。が、ちょっと気になって、OnMoveメソッドを(空のメソッドで)オーバーライドしてMoveイベントを発生させないコントロールを作ってTableLayoutPanelで普通のButtonコントロールと比較実験してみました。  すると、普通のButtonではLeft += 10;とすると、ひとまず左にずれ、イベントが発生し、そこからTableLayoutPanelに戻されて、再びイベントが発生する、という流れでした(もうこの時点でイベントが2回しか発生していないので、次を見なくても分かるのですが)。  その後、Moveイベントを発生させないコントロールで同様にLeft += 10;とすると、無論イベントは発生しませんでしたが、確かに左へ10動いた後、右へ10動きました。  Resizeも同様に比較しましたが、同様の結果が得られました。  何が言いたいかのと言うと、どうやらTableLayoutPanelはMoveイベント(Resizeイベント)を使わずに子コントロールの移動/サイズ変更を感知しているようで、この真似をしたいのですが、どうすればよいのでしょうか?  OnMove(OnResize)メソッドの後に呼び出され、親コントロールに移動/サイズ変更を伝えるメソッドがControlクラスにあると思ったのですが、それも見当たりません。  どなたか、分かる方、いらっしゃいましたら教えていただけませんか?

  • インスタンスとオブジェクト

    こんばんは。 変数について教えて下さい。 プログラム自体が初めてなので 「たのしい Ruby 第3版」を読んでいます。 ずっとインスタンスとオブジェクトの違いが曖昧なままです。 その本の「クラスとモジュール」という章にて クラスを定義する構文。 インスタンス変数とローカル変数の違いですが、 以下の説明で一部理解できずにつまずいています。 ―――――――――――― @ で始まる変数は インスタンス変数 といいます。 ローカル変数はメソッドごとに異なる変数として扱われますが、 インスタンス変数は同じインスタンス内であれば、 メソッド定義を超えてその値を参照したり、変更したりできます。 なお、初期化されていないインスタンス変数を参照すると nil が得られます。 インスタンス変数は、インスタンスごとに違う値を持つことができます。 またインスタンス変数は、 インスタンスがある間は値を保持しておいて 何度でも利用することができます。 一方、ローカル変数はメソッド呼び出しごとに新しく割り当てられるため、 メソッドから抜けると値を忘れてしまいます。 ―――――――――――― ここで分からないのは、 ・ローカル変数が "メソッドごと" に異なる変数として扱われる ・インスタンス変数は同じ "インスタンス内" であれば、 メソッド定義を超えてその値を参照したり、変更したりできます の部分です。 Webで検索してますが、 プログラミング経験ありを前提で書かれているような。 他の言語も知らないので分からない、そんなページが多いです。 人に聞くからには 自分でも頑張って理解できるように考えますので、 どうか回答よろしくお願いします。

    • ベストアンサー
    • Ruby
  • javaプログラムについて

    javaのプログラムで入力項目をDBに書き込むというプログラムを作成しているのですが、 コンソール形式だと成功するのですが、テキストボックスなどをおいて、GUI形式でやろうとするとキーイベントの中の変数ににうまく値が参照されません 以下ソース import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.Date; class meibo3 extends JFrame implements KeyListener { public static void main(String args[]) { meibo3 frame = new meibo3("タイトル"); frame.setVisible(true); } // private String name; // private String shu; // private int id; // private int su; meibo3(String title) { setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); p.setLayout(null); JLabel lmeibo = new JLabel("【名簿入力】", SwingConstants.CENTER); lmeibo.setBounds(100, 10, 80, 30); JLabel lgakuno = new JLabel("学生番号", SwingConstants.CENTER); lgakuno.setBounds(30, 40, 80, 30); JLabel lname = new JLabel("氏 名", SwingConstants.CENTER); lname.setBounds(200, 40, 80, 30); JLabel lshu = new JLabel("入力を終了しますか?(Y/N)"); lshu.setBounds(30, 120, 200, 30); JTextField gaku = new JTextField(4); gaku.setBounds(30, 70, 80, 30); JTextField namae = new JTextField(20); namae.setBounds(200, 70, 80, 30); JTextField y = new JTextField(20); y.setBounds(200, 120, 20, 30); y.addKeyListener(this); ; p.add(lmeibo); p.add(lgakuno); p.add(lname); p.add(gaku); p.add(namae); p.add(y); p.add(lshu); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); int id = Integer.valueOf(gaku.getText()).intValue(); String name = namae.getText(); int nsu = namae.getText().length(); String yn =y.getText(); //method(id,name,nsu,yn); } public void keyPressed(KeyEvent ke) { // TODO 自動生成されたメソッド・スタブ if (ke.getKeyCode() == ke.VK_ENTER) { //private void method(int id, String name, int nsu, String yn){ Date d = new Date(); SimpleDateFormat dfd = new SimpleDateFormat("yyyy-MM-dd"); Connection con = null; String day = dfd.format(d); // System.out.print(day); PreparedStatement ps = null; try { // ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver"); // データベースへ接続 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/hellodb", "root", "root"); Statement stmt = (Statement) con.createStatement(); // name,bloodType,ageのデータを検索するSQL文を作成 String sql = "INSERT INTO hellodb.meibo VALUES(" + id + ",'" + name + "','" + day + "');"; System.out.println(sql); if (id > 4 && nsu > 20) { // JOptionPane.showMessageDialog(this, "学生番号が4桁以上、氏名が20文字以上になっています。", "Error", // JOptionPane.ERROR_MESSAGE); } else { if (id < 5) { // JOptionPane.showMessageDialog(this, // "学生番号が4桁以上になっています", "Error", // JOptionPane.ERROR_MESSAGE); } else { if (nsu > 20) { // JOptionPane.showMessageDialog(this, // "氏名が20文字以上になっています。", "Error", // JOptionPane.ERROR_MESSAGE); } else { if (yn.equals("y") || yn.equals("y") || yn.equals("Y") || yn.equals("Y")) { // ps = con.prepareStatement(sql); stmt.execute(sql); // JOptionPane.showMessageDialog(this, // "成功しました", "Info", // JOptionPane.INFORMATION_MESSAGE); } else if (yn.equals("n") || yn.equals("n") || yn.equals("N") || yn.equals("N")) { } } } } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { // close処理 if (ps != null) { ps.close(); } // close処理 if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } public void keyReleased(KeyEvent arg0) { // TODO 自動生成されたメソッド・スタブ } public void keyTyped(KeyEvent arg0) { // TOD

  • ダイアログの上のテキストボックスの、初期値を設定する方法が分かりません・・・・

    VSC++2005です、 ダイアログの上のテキストボックスの初期値を設定する 方法が分かりません、 ダイアログが表示されたとき、 ダイアログに貼り付けてあるテキストボックスの初期値を 入力しておきたいのですが、うまくゆきません 下のようにしました、 ボタンをクリックして、ダイアログを表示させ ダイアログ上の エディットコントロールに、値を表示させるつもりですが、 void CXXXView::OnBnClickedButton2() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 Cfailsettei cf;  //ダイアログのクラスのインスタンス作成 cf.edit1.SetWindowTextA("yyy");   cf.edit2.SetWindowTextA("xxx"); //edit1、edit2は、エディットコントロールです cf.DoModal(); } エラーが起こってしまいます、 何故でしょうか? よろしくお願いします。