JOptionPaneの「いいえ」をEnterで選択したときの処理についてのお悩み

このQ&Aのポイント
  • JOptionPaneを使って出したダイアログの「いいえ」ボタンをエンターキーで押すと、「はい」と同じ処理がされる問題について、解決策を教えてください。
  • 現在のコードでは、エンターキーでの「いいえ」ボタンの選択に対して、誤った処理が行われています。どのように修正すれば、正しい処理を行えるようになるのでしょうか?
  • JOptionPaneのダイアログで、エンターキーで「いいえ」ボタンを押すと、「はい」と同じ処理が実行されてしまう問題が発生しています。この問題を回避するためには、どのような対策が必要でしょうか?
回答を見る
  • ベストアンサー

JOptionPaneの「いいえ」をEnterで

こんにちは。 現在、JOptionPaneを使って出したダイアログのボタンを エンターキーで選択したときの処理についてこまっています。 「いいえ」のボタンをエンターキーで押すと、 なぜか「はい」を押したときと同じ処理をしてしまうのです。 これを防ぐには、どうすればよいでしょうか? 以下、ソースコードの一部です。 //「はい」「いいえ」の結果を受け取る変数を宣言 int sentaku = 1; //ダイアログボックスを表示する処理 sentaku = JOptionPane.showConfirmDialog (null, "本当にこのイベントを削除しますか?", "削除確認" ,0); //上のダイアログボックスで選択された結果をコンソールに出します。 System.out.println("本当に削除しますか?(0:はい 1:いいえ)→"+sentaku); //ここで、「いいえ」をエンターキーで押すと、sentakuが0を返してしまいます。 //スペースキーで押すと、sentakuは1を返してくれました。

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

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

エンターキーは選択中のボタンではなくデフォルトのボタン(YES_NO_OPTIONの場合YESボタン)を押したことになる仕様のようです。スペースキーとは意味が異なります。 デフォルトのボタンを変更することは可能ですが、エンターキーの動作をスペースキーと同じにする方法は見つけられませんでした。

dekachin
質問者

お礼

ご回答ありがとうございました。 やはりそうでしたか…。 ユーザーにエンターキーで押さないよう、注意を促したいと思います。

その他の回答 (2)

回答No.3

以下の様に検証して見た所、問題なく判定できているようですが、何か勝手が違いますか? JDKは1.6.0_20です。 ※インデントが消えて見づらいですね。gooはpreタグぐらいは使えるようにするべきだと思う。。。 final JButton button = new JButton(new AbstractAction("test") { @Override public void actionPerformed(ActionEvent e) { int sentaku = JOptionPane.showConfirmDialog(null, "本当にこのイベントを削除しますか?", "削除確認" ,0); switch (sentaku ) { case JOptionPane.OK_OPTION: System.out.println("OK押下"); break; case JOptionPane.NO_OPTION: System.out.println("NO押下"); break; case JOptionPane.CANCEL_OPTION: System.out.println("CANCEL押下"); break; default: System.out.println("それ以外"); break; } } });

dekachin
質問者

お礼

ご回答ありがとうございます。 私のほうはeclipseでプログラムを作っているので、 以下のようにやってみたのですが… だめでした。 このプログラムの提出期限が過ぎてしまったので、 せっかくですが、ここで締め切ろうと思います。 本当にありがとうございました。 private JButton getJButton7() { if (jButton7 == null) { jButton7 = new JButton(); jButton7.setBounds(new Rectangle(452, 44, 198, 24)); jButton7.setMnemonic(KeyEvent.VK_X); jButton7.setText("このイベントを削除(X)"); jButton7.setFont(new Font("MS Pゴシック", Font.BOLD, 14)); jButton7.setVisible(false); jButton7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) {//以下、いただいたご回答と一部同文 int sentaku = JOptionPane.showConfirmDialog (null, "本当にこのイベントを削除しますか?", "削除確認" ,0); switch (sentaku ) { case JOptionPane.OK_OPTION: System.out.println("OK押下"); break; case JOptionPane.NO_OPTION: System.out.println("NO押下"); break; case JOptionPane.CANCEL_OPTION: System.out.println("CANCEL押下"); break; default: System.out.println("それ以外"); break; } } });

回答No.2

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6240389 #何か他に影響しそうで怖いなぁ

dekachin
質問者

お礼

ご回答ありがとうございました。 どうやらこれは、英語のサイトのようですね。 これからは英語の勉強もしなくてはいけませんね。 がんばります。

関連するQ&A

  • JARファイルをコンソールで表示できません。

    EclipseでJarファイルを作成しました。 ソースは以下のとおりなのですが、 Jarファイルをダブルクリックすると、ダイアログボックスだけが表示されます。 コンソール出力をしたいのですが、どうすればいいでしょうか?よろしくお願いします。 WindowsXpです。 ---------------------------------------- import javax.swing.*; public class test { public static void main(String[] args) { System.out.println("Hello Java"); JOptionPane.showInputDialog("Show Dialog"); System.out.println("Hello Java"); } } ----------------------------------------

    • ベストアンサー
    • Java
  • Delphi5について

    Delphi5でのコンソールアプリケーションの作り方が分かりません。ヘルプを見ると『新規作成を選択しダイアログボックスのコンソールアプリケーションを選択する』とありますが、ダイアログボックス内にはコンソールアプリケーションの項目はありませんでした。 何か設定を変える必要があるのでしょうか。

  • ASP.Net return confirm

    お世話になります。 削除ボタンで確認の為に OnClientClick="return confirm('本当に削除しても良いですか?'); と記述しますが、この状態ですとOKボタンがデフォルト選択されていて、何かの拍子にエンターキーを押した場合に削除処理が実行されてしまいます。 出来れば削除処理はOKを選択してエンターキーか、もしくはマウスでクリックで実現したと思います。 デフォルトをキャンセルにする方法はあるのでしょうか? JavaScript では難しいなどの記述しかなく、ダメ元でこちらにて質問させていただいました。 何卒よろしくお願いいたします。

  • ダイアログプログラムでEnterキーを検出するには?

    おせわになります。 開発環境はWindowsXP、VisualC++.NET、SDK開発です。 ダイアログ上のテキストボックスでエンターキーが入力されたら、 値を取り込むというプログラムを考えています。 ただ、WM_KEYDOWNではENTERが検出できないで困っています。 WM_SYSKEYでもENTERを押してもOKボタンが押されてしまいます。 過去のログを見ますとTranslateMessageでフックするというような 記述がありますが、具体的なコードは無いでしょうか? メイン関数内のループでMSGを処理するのではと思っていますが 思うような動作が出来ません。

  • モーダルとスレッド

    JOptionPaneでダイアログを出力する直前に新しいスレッドを作っておき、 その中でバックグラウンド用処理を行いたいと思っています。 色々ためしたのですが、ダイアログの了解ボタンを押すまで新たに作った スレッド内のバックグラウンド処理もブロックされる様です。 (スレッドのプライオリティ等も変更してみました。) モーダル画面を起動するとその画面が終了するまで、そのプロセス内の 全てのスレッドがブロックされるという事なのでしょうか? (勿論、モーダル画面からの入力受付となるEventDispatchThreadは動いて いるのでしょうけど) もし、「そうである」ならば、JOptionPaneはあきらめて、モードレスダイアログ を作成しようと思いますし、「いや、こういう手段がある」というのなら それを教えてください。 以上、よろしくお願いします。

    • ベストアンサー
    • Java
  • AccessのコンポボックスでNULLを入れたくない

    AccessのコンポボックスでNULLを入れたくない Accessのテーブルで、NULLの代わりに0を入れたいのですが、どうすればいいのでしょうか? テーブルの既定値は0です。 そのテーブルには、フォームのコンボボックスから値を入れます。 そのコンボボックスの選択は必修ではありません。 そのため、選択しない場合は、既定値の0が入ります。 また、選択した場合は、数字が入ります。 問題は、コンボボックスで選択して、やめた場合です。 まず、コンボボックスで選びます。 でも、きが変わり、デリート(削除)でコンボボックスを空欄にします。 そして、更新した場合、テーブルにNULLが入ります。 私の希望は、コンボボックスをデリート(削除)した場合、既定値の0を入れたいのですがどうすればいいのでしょうか? 値要求は、メッセージ(ダイアログ?)が出るので、設定しないものとします。(他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。) よろしくお願いします。

  • 推奨書籍を教えてください

    こんにちは。 Visual C++.NET2003を用いてプログラミングを行っています。しかし、コンパイラとして使用しているだけでダイアログボックスやボタンなどのビジュアル的なプログラミングはしておらず、C言語によるコンソールアプリケーションを作っています。 今後も、マルチスレッドなどのプログラムを、コンソール上でプログラミングしていきたい思っています。しかし、本のサンプルプログラムを見ても、だいたいはウィンドウベース(ボタンやマウスクリック、ダイアログボックス)でのマルチスレッド処理等が記載されており、コンソール上でのAPIの使用の仕方がありません・・・(今現在、ソケットプログラミングを進めています) ウィンドウベースではなく、コンソール上でのAPIの使用の仕方などが記載されている本はありますでしょうか? まずは、ウィンドウズプログラミングを知ることからはじめる必要があるということでしょうか・・・・ よろしくお願いします。

  • 履歴がDeleteキーで消えません

    IE6です。標準ボタンに履歴のボタンがありますね。このボタンを押すと履歴が並びますが、消したい履歴フォルダを選択してDeleteキーを押すと、フォルダの削除の確認ダイアログボックスが表示されていたんですが、先ほどから、このダイアログボックスが出ないようになりました。正確に言うと、ダイアログボックス出る時もあるんですが、出ない時が多いのです。何故こうなったんでしょうか?もちろん、右クリックして削除すれば、事足りるんですが、Deleteキーで削除したいのです。 お気に入りのフォルダは問題なく、Deleteキーで削除することができます。 サイトによって、この方法が使えるところと使えない所があるのかも知れません。ヤフーやOKWebの画面を開いているとダメのようなんですが・・・。 よろしくお願いします。

  • テキストボックスでEnterを押した時の処理

    VisualStudioのASP.NETで開発しています。 今回、お聞きしたいのは、 テキストボックスとコマンドボタンが同じページに複数あって、 このテキストボックスにカーソルがある時にEnterを押せば、 このコマンドボタンが押される。という処理をするには、 どのようにすればいいのでしょうか? 普段、色々なサイトを見てみますと、 テキストボックスにカーソルがあるとき、 その後、押すであろうコマンドボタンに、 うっすらカーソルがあってるというか、 選択状態になっていますよね? それを指定する方法をご存知の方いらっしゃいませんでしょうか? なんだかうまく説明できませんけども、 どうぞ、よろしくお願いしますm(_ _)m

  • VBからExcel上の処理をするプログラムを作成しています。

    VB初心者です。 今、VBの画面からExcelを起動させて、一連の処理をした後、 またVBの画面に自動的に戻るようなプログラムを作成しようとしているのですが、 Excelのシートを削除する時に、ダイアログボックスが開いてしまい、そこで処理が止まってしまいます。 ダイアログボックスを開かないようにするとか、自動的にOKボタンを押したことにするとか、 何か方法があったら教えてください。

専門家に質問してみよう