2017-03-05 135 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