繁体   English   中英

YES_NO_OPTION JOptionPane在“是”上继续执行Java代码

[英]YES_NO_OPTION JOptionPane continue java code on 'yes'

基本上,我有一个会在发生某些情况时启动JOptionPane的游戏,我希望能够在用户单击“是”时返回到游戏。 有点像暂停功能

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

由于OpenJDK是开源的(GNU通用公共许可证版本2),因此您可以查看其源代码。 我通常在grepcode.com上浏览Java源代码。 如果安装OracleJDK并选择安装源代码的选项,则还可以在JDK安装目录(src.zip)中找到大多数源代码。 请注意,该许可证可能不允许您自己重用此代码(通常是相同的)(但肯定比使用反编译器好得多)。

这些指向特定方法的链接在我最喜欢的浏览器(基于Chrome的Vivaldi)中不起作用。 如果您不想自己寻找特定的方法,建议您使用Firefox。

以下是来自grepcode.com的相关代码段:

JOptionPane(构造函数) -每个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  }

在这里,我们看到JOptionPaneUIManager请求一个OptionPaneUI OptionPaneUI是一个抽象类(看起来更像一个接口),因此您在那里找不到任何代码。 它唯一的子类是BasicOptionPaneUIMultiOptionPaneUI 使用调试器,我发现它是showConfirmDialog BasicOptionPaneUI 然后,将结果传递到从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 然后,为每个按钮提供一个ButtonActionListener

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM