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; 
     ... 
    } 
} 

回答

2

你永远不会改变i,它始终是一个,所以case 1:在开关始终是真实的,而JPanel总是添加到同一个地方。

+0

对不起。 int i = 1;只是一个错字。它没有效果。我使用了增强型for循环。 – coder9

+0

@ coder9你的交换机里有什么'i'然后 – jgon

+0

我的不好。再次。我想到了。如上所述改变循环并修复它。 +1作为快速回复。 :) – coder9