2017-03-27 12 views
1

YES_NO_OPTIONダイアログのようにJOptionPaneを作成し、キーボードショートカットを維持しながらデフォルトを「いいえ」に変更した経験がある人はいますか?私は{"YES", "NO"}のオプションを設定するためにオブジェクトの配列を使用し、次にJOptionPane.showOptionDialogのパラメータでこれらのオプションを渡しました。これは、ボタンのフォーカスを変更する際に機能しますが、ボタンのキーボードショートカットは削除されます。フォーカスを変更しながらキーボードショートカットを維持するにはどうしてですか?これは「NO」にデフォルト設定する方法の問題ではなく、キーボードショートカットを維持する方法です。 「JOptionPane.showConfirmDialogにデフォルトで選択されていないようにする方法」という質問フォーカスを求めているが、誰もキーボードショートカットを維持する方法には答えていない。ここにコードのスニペットがあります。キーボードショートカットを維持しながらJOptionPane.YES_NO_OPTIONのデフォルトを変更しますか?

Object[] options = {"YES", "NO"}; 
int choice = JOptionPane.showOptionDialog(null, "Please choose yes/no", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]); 
+0

可能な重複[いいえデフォルトで選択されているJOptionPane.showConfirmDialogをしない方法?] (http://stackoverflow.com/questions/1395707/how-to-make-joptionpane-showconfirmdialog-have-no-selected-by-default) – Omore

+0

これは重複していると思いますが、私の質問には特に言及していますデフォルトのフォーカスではなく、キーボードショートカットに割り当てます。私はあなたが重複している可能性があると投稿した質問を見てきましたが、焦点の変更がキーボードショートカットを排除すると言われても、誰も解決策を持たないようです。ありがとう@Omore – enjoi2349

+0

JOptionPaneに「NO」ボタンだけを描画したいですか? – Omore

答えて

1

私はこれを行うには "簡単な"方法はないと思います。代わりに、あなた自身のボタンを用意する必要があるでしょう。

がそうJOptionPane Passing Custom ButtonsDisable ok button on JOptionPane.dialog until user gives an inputをもとに、独自のJButton Sは、たとえば、あなたがそれらを望むように事前に設定提供することができます

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.Action; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JOptionPane; 

public class Test { 

    public static void main(String[] args) { 
     JButton btnYes = new JButton("Yes"); 
     btnYes.setMnemonic('s'); 
     btnYes.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane pane = getOptionPane((JComponent)e.getSource()); 
       pane.setValue(JOptionPane.YES_OPTION); 
      } 
     }); 
     JButton btnNo = new JButton("No"); 
     btnNo.setMnemonic('o'); 
     btnNo.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane pane = getOptionPane((JComponent)e.getSource()); 
       pane.setValue(JOptionPane.NO_OPTION); 
      } 
     }); 
     JButton[] options = new JButton[] {btnYes, btnNo}; 

     JOptionPane.showOptionDialog(
       null, 
       "Help", 
       "More", 
       JOptionPane.YES_NO_OPTION, 
       JOptionPane.WARNING_MESSAGE, 
       null, options, btnYes); 

    } 

    protected static JOptionPane getOptionPane(JComponent parent) { 
     JOptionPane pane = null; 
     if (!(parent instanceof JOptionPane)) { 
      pane = getOptionPane((JComponent)parent.getParent()); 
     } else { 
      pane = (JOptionPane) parent; 
     } 
     return pane; 
    } 

} 
0

これを行う方法はありません。 私の提案はあなた自身のダイアログを作成することです。 その解決策が気に入らなければ、オプションとしてString配列の代わりにJButton配列を提供することで試してみることができます。ショートカットを有効にするには、これらのボタンを自分でニーモニックで作成する必要があります。

とにかく、このボタン構築ロジックはBasicOptionPaneUI.getButtonsメソッドにあります。これとその使用法をBasicOptionPaneUI.creatButtonAreaで行ってください。あなたはこれを行うためのより良い方法を得るかもしれません。

関連する問題