我正在寫一個簡單的遊戲應用程序,我被困在這個問題上。重繪不工作內部行動執行
- PWAIT和段Pmain是2個面板
- 幀是主框架
「創造」是一個按鈕,該段Pmain面板的內部,這是它被點擊時所執行的操作:
下面是代碼:
// ACTION: Create new game
create.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(UA.alreadyOpen()) {
JOptionPane.showMessageDialog(null,"already open game!");
return;
}
int n = 0;
String nome = null;
try {
n = Integer.parseInt(JOptionPane.showInputDialog(null, "Give the max number of guessers"));
nome = JOptionPane.showInputDialog(null, "give the name of the game");
if (n < 1 || nome == null) System.out.println("mainInterface: input problems"); // TODO ...
frame.setContentPane(pwait);
pwait.setVisible(true);
pmain.setVisible(false);
frame.pack();
} catch (NumberFormatException e1) {
// ???
e1.printStackTrace();
} catch (HeadlessException e1) {
// ???
e1.printStackTrace();
}
// AND HERE IS THE PROBLEM:
if(!UA.apriPartita(n, nome))
System.out.println("ERR creazione partita"); // TODO
refreshPartite();
}
});
UA是這種INTERF背後的邏輯級的王牌班。被調用的方法「UA.apripartita(..)」工作正常,它做了很多事情。 問題是: 我希望界面重新繪製並顯示在等待面板時,單擊「創建」按鈕,但它不直到方法UA.apripartita(..)返回(和,我猜, ActionPerformed函數也返回?)。
實際上,我也嘗試刪除該UA.apripartita(..)方法調用,它只是工作正常。 爲什麼它在裏面的方法不起作用?
在此先感謝!
ps。已經嘗試把一些frame.repaint()或frame.invalidate(),但他們似乎什麼都不做。
pps。歡迎任何其他關於此代碼的良好建議!
'frame.setContentPane(pwait);'使用['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html)來代替[這個答案](http://stackoverflow.com/a/5786005/418556)。 –
我第二@ AndrewThompson建議您使用CardLayout。另外,如果您的問題沒有得到快速解決,請考慮創建併發布[最小示例程序或mcve](http://stackoverflow.com/help/mcve),以便我們確切地看到問題出在哪裏。我幾乎可以保證你'repaint()'調用不是這裏的問題。 –