天使と悪魔選手権

こんにちは。
現在、JOptionPaneを使って出したダイアログのボタンを
エンターキーで選択したときの処理についてこまっています。
「いいえ」のボタンをエンターキーで押すと、
なぜか「はい」を押したときと同じ処理をしてしまうのです。
これを防ぐには、どうすればよいでしょうか?

以下、ソースコードの一部です。

//「はい」「いいえ」の結果を受け取る変数を宣言
int sentaku = 1;

//ダイアログボックスを表示する処理
sentaku = JOptionPane.showConfirmDialog
(null, "本当にこのイベントを削除しますか?", "削除確認" ,0);

//上のダイアログボックスで選択された結果をコンソールに出します。
System.out.println("本当に削除しますか?(0:はい 1:いいえ)→"+sentaku);
//ここで、「いいえ」をエンターキーで押すと、sentakuが0を返してしまいます。
//スペースキーで押すと、sentakuは1を返してくれました。

A 回答 (3件)

エンターキーは選択中のボタンではなくデフォルトのボタン(YES_NO_OPTIONの場合YESボタン)を押したことになる仕様のようです。

スペースキーとは意味が異なります。
デフォルトのボタンを変更することは可能ですが、エンターキーの動作をスペースキーと同じにする方法は見つけられませんでした。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

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

お礼日時:2011/02/23 21:23

以下の様に検証して見た所、問題なく判定できているようですが、何か勝手が違いますか?


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;
}
}
});
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

私のほうは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;
}
}
});

お礼日時:2011/02/23 21:48

http://bugs.sun.com/bugdatabase/view_bug.do?bug_ …

#何か他に影響しそうで怖いなぁ
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

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

お礼日時:2011/02/23 21:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報