基本上我有一个游戏,当有事情发生时调出JOptionPane,我希望能够在用户点击是时返回到游戏。有点像一个取消暂停功能YES_NO_OPTION JOptionPane在'yes'上继续java代码
回答
注意:当我发布这个答案时,问题是完全不同的 - 阅读评论。
由于OpenJDK是开放源代码(GNU通用公共许可证第2版),因此您可以查看其源代码。我通常在grepcode.com上浏览Java源代码。如果您安装了OracleJDK并选择了安装源的选项,那么您还可以在JDK安装目录(src.zip)中找到大部分源代码。只要注意,这个许可证可能不允许你为自己重用这些代码(通常是相同的)(但它肯定比使用反编译器好得多)。
这些指向特定方法的链接不适用于我最喜欢的浏览器(基于Chrome的Vivaldi)。如果你不想自己去寻找特定的方法,我建议你使用Firefox。
下面是grepcode.com相关片段:
JOptionPane (constructor) - 这是由每show...Dialog
方法叫:
1830 public JOptionPane(Object message, int messageType, int optionType,
1831 Icon icon, Object[] options, Object initialValue) {
...
1838 setOptionType(optionType);
...
1841 updateUI();
1842 }
1877 public void updateUI() {
1878 setUI((OptionPaneUI)UIManager.getUI(this));
1879 }
在这里,我们看到, JOptionPane
请求中的。 OptionPaneUI
是一个抽象类(看起来更像一个接口),所以你在那里找不到任何代码。其唯一的小类是BasicOptionPaneUI
或MultiOptionPaneUI
。使用调试器,我发现它是BasicOptionPaneUI
对于showConfirmDialog
。之后,将结果传递到JComponent
继承的setUI
方法。除了一些基本的现场检查,它会调用ui.installUI方法:
137 public void installUI(JComponent c) {
138 optionPane = (JOptionPane)c;
139 installDefaults();
140 optionPane.setLayout(createLayoutManager());
141 installComponents();
142 installListeners();
143 installKeyboardActions();
144 }
让我们来看看installComponents下一个:
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声音很有前途:
613 protected Container createButtonArea() {
614 JPanel bottom = new JPanel();
...
630 addButtonComponents(bottom, getButtons(), getInitialValueIndex());
631 return bottom;
632 }
这种方法现在要求addButtonComponents 。这种方法在这里复制太长,但是,总之,它获取按钮的特定于语言环境的字符串并将它们添加为JButton s。然后它给每个人一个ButtonActionListener。
这是很好的知道,但并没有真正回答我如何返回游戏的问题? – Eishknaar
@Eishknaar恩,你几乎编辑你的问题,只保留1个字(不包括文章和代词)。我相信这个答案对你的原始问题是有效的,而我同意它与你的编辑无关。 – Nulano
@Eishknaar关于这个新的非暂停问题,你只需要阅读文档。 JOptionPane默认为模态对话框。这意味着,显示JOptionPane的调用将被阻止,直到JOptionPane关闭,此时show方法返回并继续您的代码。 JOptionPane的输入类型不受任何影响。 http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#create – Nulano
- 1. JOptionPane YES NOOPTION
- 2. Java异常继续代码回路
- 3. 我在Java中的JOptionPane不会继续到下一个窗口?
- 4. JSpinner继续旋转,而JOptionPane显示在ChangeListener上
- 5. 继续下一行代码
- 6. 代码继续问题?
- 7. 继续在后台运行代码ASP.NET
- 8. 如何继续通过代码迭代
- 9. JOptionPane的选择Yes/No确认对话框问题
- 10. Python:使代码在不同的行上继续
- 11. SemaphoreSlim.WaitAsync继续码
- 12. 在Java /硒继续命令
- 13. 以下Java“继续”代码如何转换为Scala?
- 14. 代码需要继续...(Python与Tkinter)
- 15. 类继续的Xcode代码片段?
- 16. 代码不会继续,而环
- 17. 使Python代码异常后继续
- 18. 继续代码按下按钮
- 19. 代码不能继续以onpostexecute
- 20. Visual Studio代码 - 编辑并继续
- 21. Python多处理,代码继续执行?
- 22. C#if else停止继续的代码
- 23. 错误时继续执行代码
- 24. 下一行的继续代码
- 25. VBA代码不应该再继续
- 26. 停止代码X秒,然后继续
- 27. Process.Start()并继续使用我的代码
- 28. JSON失败并继续执行代码
- 29. 如何打开2继续在c#代码后面继续优化
- 30. Java按键后马上继续移动?
请问你更精确吗?你的实际目标是什么?你想知道JOptionPane背后的代码,还是想要用Yes_No_Option来实现一个窗格,并且不知道如何完成这个任务? – DiabolicWords
@DiabolicWords对不起,我不太确定怎么说,我想知道JOptionPane – Eishknaar
背后的代码好吧。那么,我想,你唯一的机会就是找到一个好的反编译器,并在超类的方法中看看代码。对不起,这可能听起来有点不友好,但据我所知,确实是看到幕后的唯一途径。 – DiabolicWords