2017-03-05 133 views
0

基本上我有一个游戏,当有事情发生时调出JOptionPane,我希望能够在用户点击是时返回到游戏。有点像一个取消暂停功能YES_NO_OPTION JOptionPane在'yes'上继续java代码

+0

请问你更精确吗?你的实际目标是什么?你想知道JOptionPane背后的代码,还是想要用Yes_No_Option来实现一个窗格,并且不知道如何完成这个任务? – DiabolicWords

+0

@DiabolicWords对不起,我不太确定怎么说,我想知道JOptionPane – Eishknaar

+0

背后的代码好吧。那么,我想,你唯一的机会就是找到一个好的反编译器,并在超类的方法中看看代码。对不起,这可能听起来有点不友好,但据我所知,确实是看到幕后的唯一途径。 – DiabolicWords

回答

1

注意:当我发布这个答案时,问题是完全不同的 - 阅读评论。

由于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 } 

JOptionPane (updateUI)

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

在这里,我们看到, JOptionPane请求中的。 OptionPaneUI是一个抽象类(看起来更像一个接口),所以你在那里找不到任何代码。其唯一的小类是BasicOptionPaneUIMultiOptionPaneUI。使用调试器,我发现它是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

+0

这是很好的知道,但并没有真正回答我如何返回游戏的问题? – Eishknaar

+0

@Eishknaar恩,你几乎编辑你的问题,只保留1个字(不包括文章和代词)。我相信这个答案对你的原始问题是有效的,而我同意它与你的编辑无关。 – Nulano

+0

@Eishknaar关于这个新的非暂停问题,你只需要阅读文档。 JOptionPane默认为模态对话框。这意味着,显示JOptionPane的调用将被阻止,直到JOptionPane关闭,此时show方法返回并继续您的代码。 JOptionPane的输入类型不受任何影响。 http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#create – Nulano