2017-03-27 1 views
1

Hat jemand Erfahrung mit dem Erstellen einer JOptionPane wie der YES_NO_OPTION Dialog und Ändern der Standardeinstellung auf "NEIN" unter Beibehaltung der Tastenkombinationen? Ich benutzte ein Array von Objekten, um die Optionen von {"YES", "NO"} und dann in den JOptionPane.showOptionDialog Parametern zu füllen, die ich in diesen Optionen passierte. Dadurch wird der Fokus der Schaltfläche geändert, aber die Tastenkombinationen für die Schaltflächen werden entfernt. Gibt es trotzdem die Tastaturkürzel beizubehalten und gleichzeitig den Fokus zu ändern? Dies ist keine Frage, wie man auf "NEIN" setzt, sondern wie man die Tastaturkürzel pflegt. Die Frage "Wie mache ich JOptionPane.showConfirmDialog haben standardmäßig keine ausgewählt?" fragt nach Fokus, niemand antwortet jemals, wie man Tastaturkürzel behält. Hier ist ein Schnipsel des Codes ...Standard von JOptionPane.YES_NO_OPTION geändert, während Tastaturkürzel beibehalten werden?

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

Mögliche Duplikat [Wie JOptionPane.showConfirmDialog machen standardmäßig Nein ausgewählt haben?] (http://stackoverflow.com/questions/1395707/how-to-make-joptionpane-showconfirmdialog-have-no-selected-by-default) – Omore

+0

Ich kann sehen, wie Sie denken, dass dies ein Duplikat ist, bezieht sich jedoch meine Frage speziell zu den Tastaturkürzeln, nicht zum Standardfokus. Ich habe die Frage gesehen, die Sie als mögliches Duplikat gepostet haben, und obwohl die Leute erwähnen, dass sich der Schwerpunkt verlagert, werden Tastaturabkürzungen beseitigt, und niemand scheint eine Lösung zu finden. Danke @Omore – enjoi2349

+0

Sie wollen nur "NO" -Taste in JOptionPane zeichnen? – Omore

Antwort

1

Ich glaube nicht, dass es eine "einfache" Möglichkeit, dies zu tun ist. Stattdessen müssen Sie wahrscheinlich Ihre eigenen Schaltflächen bereitstellen.

So basiert auf JOptionPane Passing Custom Buttons und Disable ok button on JOptionPane.dialog until user gives an input, können Sie Ihre eigenen JButton s bieten vorkonfigurierte so, wie Sie sie wollen, zum Beispiel

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

Es gibt keine direkte Möglichkeit, dies zu tun. mein Vorschlag ist es, einen eigenen Dialog zu erstellen. Wenn Sie diese Lösung nicht mögen, können Sie versuchen, indem Sie ein JButton-Array anstelle von String-Array als Optionen bereitstellen. Diese Schaltflächen sollten mit eigenen Mnemotechniken erstellt werden, um die Verknüpfungen zu aktivieren.

sowieso diese Schaltfläche Konstruktion Logik gibt es in der BasicOptionPaneUI.getButtons Methode. Gehen Sie durch diese und seine Verwendung in BasicOptionPaneUI.creatButtonArea. dann können Sie einen besseren Weg, dies zu tun

Verwandte Themen