2017-03-05 2 views
0

Im Grunde habe ich ein Spiel, das den JOptionPane aufruft, wenn etwas passiert, ich möchte in der Lage sein, zum Spiel zurückzukehren, wenn der Benutzer ja klickt. So etwas wie eine Unpause-FunktionYES_NO_OPTION JOptionPane Java-Code auf 'Ja' setzen

+0

Könnten Sie bitte genauer sein? Was ist dein eigentliches Ziel? Möchten Sie den Code hinter dem JOptionPane kennen oder möchten Sie einen Bereich mit der Yes_No_Option implementieren und wissen nicht, wie man das macht? – DiabolicWords

+0

@DiabolicWords Tut mir leid, ich war mir nicht sicher, wie ich es formulieren sollte, ich würde gerne den Code hinter dem JOptionPane wissen. – Eishknaar

+0

Okay. Dann, denke ich, ist Ihre einzige Chance, einen guten Decompiler zu finden und den Code in der Superklassenmethode anzuschauen. Tut mir leid, das hört sich vielleicht etwas unfreundlich an, aber es ist tatsächlich, soweit ich weiß, die einzige Möglichkeit, hinter die Kulissen zu schauen. – DiabolicWords

Antwort

1

HINWEIS: Als ich diese Antwort postete, war die Frage ganz anders - lies die Kommentare.

Da OpenJDK Open-Source (GNU General Public License Version 2) ist, können Sie seinen Quellcode einsehen. Normalerweise gucke ich Java-Quellcode auf grepcode.com. Wenn Sie OracleJDK installieren und die Option zum Installieren von Quellen auswählen, können Sie auch den Großteil des Quellcodes im JDK-Installationsverzeichnis (src.zip) finden. Seien Sie vorsichtig, dass die Lizenz dafür nicht erlaubt, dass Sie diesen Code (es ist normalerweise derselbe) für sich selbst verwenden (aber es ist sicherlich viel besser als ein Decompiler).

Diese Links zu den spezifischen Methoden funktionieren nicht in meinem Lieblingsbrowser (Vivaldi, basierend auf Chrome). Wenn Sie nicht selbst nach den spezifischen Methoden suchen möchten, empfehle ich Ihnen, Firefox zu verwenden.

Hier sind die relevanten Ausschnitte aus grepcode.com:

JOptionPane (constructor) - das von jedem show...Dialog Methode aufgerufen wird:

1830 public JOptionPane(Object message, int messageType, int optionType, 
1831      Icon icon, Object[] options, Object initialValue) { 
      ... 
1838  setOptionType(optionType); 
      ... 
1841  updateUI(); 
1842 } 

JOptionPane (updateUI):

1877 public void updateUI() { 
1878  setUI((OptionPaneUI)UIManager.getUI(this)); 
1879 } 

Hier sehen wir, dass die JOptionPane fordert eine OptionPaneUI von deran. OptionPaneUI ist eine abstrakte Klasse (die mehr wie eine Schnittstelle aussieht), so dass Sie dort keinen Code finden können. Die einzigen Unterklassen sind BasicOptionPaneUI oder MultiOptionPaneUI. Unter Verwendung des Debuggers fand ich, dass es BasicOptionPaneUI für einen showConfirmDialog ist. Danach wird das Ergebnis in die setUI-Methode übernommen, die von JComponent übernommen wurde. Anders als einige grundlegende Feldprüfung, nennt es die ui.installUI Methode:

137 public void installUI(JComponent c) { 
138  optionPane = (JOptionPane)c; 
139  installDefaults(); 
140  optionPane.setLayout(createLayoutManager()); 
141  installComponents(); 
142  installListeners(); 
143  installKeyboardActions(); 
144 } 

die bei installComponents Schauen wir weiter:

171 protected void More ...installComponents() { 
172  optionPane.add(createMessageArea()); 
173 
174  Container separator = createSeparator(); 
175  if (separator != null) { 
176   optionPane.add(separator); 
177  } 
178  optionPane.add(createButtonArea()); 
179  optionPane.applyComponentOrientation(optionPane.getComponentOrientation()); 
180 } 

createButtonArea Sound recht vielversprechend:

613 protected Container createButtonArea() { 
614  JPanel bottom = new JPanel(); 
      ... 
630  addButtonComponents(bottom, getButtons(), getInitialValueIndex()); 
631  return bottom; 
632 } 

Diese Methode ruft nun addButtonComponents . Diese Methode ist zu lang, um hier zu kopieren, aber kurz gesagt, erhält sie die länderspezifischen Strings für die Schaltflächen und fügt sie als JButton s hinzu. Es gibt dann jedem von ihnen eine ButtonActionListener.

+0

Das ist toll zu wissen, beantwortet aber nicht wirklich meine Frage, wie ich zum Spiel zurückkehren soll? – Eishknaar

+0

@Eishknaar Nun, Sie haben Ihre Frage so weit bearbeitet, dass Sie nur noch 1 Wort behalten (ausgenommen Artikel und Pronomen). Ich glaube, dass diese Antwort für Ihre ursprüngliche Frage gültig ist, während ich zustimme, dass sie nichts mit Ihrer Bearbeitung zu tun hat. – Nulano

+0

@Eishknaar In Bezug auf diese neue Frage, müssen Sie nur die Dokumentation lesen. JOptionPane ist standardmäßig ein modaler Dialog. Dies bedeutet, dass ein Aufruf zum Anzeigen des JOptionPane so lange blockiert, bis das JOptionPane geschlossen wird. An diesem Punkt kehrt die show-Methode zurück und Ihr Code wird fortgesetzt. Dies wird durch den Eingangstyp von JOptionPane in keiner Weise beeinflusst. http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#create – Nulano