0
我只能看到最後添加的JPanel。以前的那些似乎被最後一個取代。爲什麼是這樣?這是我的代碼。提前致謝。只顯示Event-Dispatch線程中最後添加的JPanel到JFrame
...
class GUIController {
BaseFrame bf = new BaseFrame(); //is a JFrame
public void showFrame(final String frameName, final JPanel... panels){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Class c;
Constructor ctr;
c = Class.forName("com.mytunes.client.views.frames." + frameName + "Frame");
ctr = c.getConstructor();
bf.removeAll();
bf = (BaseFrame) ctr.newInstance(); // no issue with getting the JFrame dynamically created!
for(JPanel panel:panels){
switch(i){
case 1: bf.getContentPane().add(panel,BorderLayout.PAGE_START);
break;
case 2:
bf.getContentPane().add(panel,BorderLayout.CENTER);
break;
case 3:
bf.getContentPane().add(panel,BorderLayout.PAGE_END);
break;
}
}
bf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
bf.pack();
bf.setVisible(true);
} catch (InstantiationException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchMethodException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(GUIController.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public void showEnterCard(String frame){
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
showFrame(frame, p1,p2, p3);
}
}
class Main{
public static void main(String args[]){
GUIController c = new GUIController();
c.showEnterCard("FirstFrame");
}
}
編輯:(解決方案)
循環改變如下:
for(int i = 1; i <= panels.length; i++){
switch(i){
case 1:
bf.getContentPane().add(panels[0],BorderLayout.PAGE_START);
break;
...
}
}
對不起。 int i = 1;只是一個錯字。它沒有效果。我使用了增強型for循環。 – coder9
@ coder9你的交換機裏有什麼'i'然後 – jgon
我的不好。再次。我想到了。如上所述改變循環並修復它。 +1作爲快速回復。 :) – coder9