基本上我有一个游戏,当有事情发生时调出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中的JOptionPane不会继续到下一个窗口?
- 3. 代码继续问题?
- 4. 如何继续通过代码迭代
- 5. JOptionPane的选择Yes/No确认对话框问题
- 6. SemaphoreSlim.WaitAsync继续码
- 7. 在Java /硒继续命令
- 8. 如何打开2继续在c#代码后面继续优化
- 9. 错误时继续执行代码
- 10. 停止代码X秒,然后继续
- 11. JSON失败并继续执行代码
- 12. Visual Studio代码 - 编辑并继续
- 13. Process.Start()并继续使用我的代码
- 14. 代码不能继续以onpostexecute
- 15. Java JOptionPane
- 16. PHP在前代函数完成之前继续执行代码
- 17. 从Yes重命名Javascript确认消息框标签以继续
- 18. 在继续使用Java中的println之前,如何让代码等待对象?
- 19. Java不会继续while()
- 20. UISplitViewController StoryBoards继续取代detailview
- 21. 继续n次迭代
- 22. JOptionPane错误Java
- 23. Java中的JOptionPane
- 24. 现代IDE是否立即编译源代码并继续?
- 25. 在下面的代码(wcf服务器)中回拨继续
- 26. 在r Markdown中结束文档并继续输入代码
- 27. react-router为什么代码在转换后继续执行?
- 28. 代码似乎继续运行后返回语句(在C)
- 29. '继续'如何在这个Python代码中工作?
- 30. 如何创建代码,以继续在vb.net计数定时器
请问你更精确吗?你的实际目标是什么?你想知道JOptionPane背后的代码,还是想要用Yes_No_Option来实现一个窗格,并且不知道如何完成这个任务? – DiabolicWords
@DiabolicWords对不起,我不太确定怎么说,我想知道JOptionPane – Eishknaar
背后的代码好吧。那么,我想,你唯一的机会就是找到一个好的反编译器,并在超类的方法中看看代码。对不起,这可能听起来有点不友好,但据我所知,确实是看到幕后的唯一途径。 – DiabolicWords