2014-07-09 257 views
0

問題 - 下面給出的代碼不顯示我的JPanel(PageOne),我不確定它爲什麼不顯示我的JPanel(PageOne)。請幫忙。JPanel不顯示在JFrame上

我已經添加了JPanel(PageOne)到我的面板有一個cardLayout(); 我已經將我的JFrame設置爲可見。

PageOne.java

import javax.swing.JLabel; 
    import javax.swing.JPanel; 

    public class PageOne extends JPanel { 

    public PageOne() { 
     JLabel label = new JLabel("Page 1"); 
     JPanel panel = new JPanel(); 
     panel.add(label); 
    } } 

PageTwo.java

import javax.swing.JLabel; 
    import javax.swing.JPanel; 

    public class PageTwo extends JPanel { 

    public PageTwo() { 
     JLabel label = new JLabel("Page 2"); 
     JPanel panel = new JPanel(); 
     panel.add(label); 
     } 
    } 

DisplayUI.java

import java.awt.CardLayout; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.SwingUtilities; 

    public class DisplayUI { 

    public static void main(String[] args) { 
      new DisplayUI(); 
    } 

     public DisplayUI() { 
      SwingUtilities.invokeLater(new Runnable() { 
      @Override 
       public void run() { 
        CardLayout cardLayout = new CardLayout(); 
        JFrame frame = new JFrame("frame"); 
        JPanel panel = new JPanel(); 
        panel.setLayout(cardLayout);  
        panel.add(new PageOne(), "1"); 
        panel.add(new PageTwo(), "2"); 
        cardLayout.show(panel,"1"); 
        frame.add(panel); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.pack(); 
        frame.setLocationRelativeTo(null); 
        frame.setVisible(true); 
       } 
      }); 
     } 
    } 
+2

此代碼似乎既是擴展'JPanel'並使用'JPanel'作爲實例。做一個或另一個。如果事實如此,除非必要(不是),否則不要擴展'JPanel'。 –

回答

2

你沒有實際添加任何東西PageOnePageTwo板...

public PageOne() { 
    JLabel label = new JLabel("Page 1"); 
    JPanel panel = new JPanel(); 
    panel.add(label); 
    // But nothing is actually added to "this"... 
} 

除非你「真的」需要它,你可以擺脫第二JPanel,並直接添加到labelPageOne(同樣的事情也適用於PageTwo

public PageOne() { 
    JLabel label = new JLabel("Page 1"); 
    add(label); 
} 

或添加JPanel創建(包含標籤)

public PageOne() { 
    JLabel label = new JLabel("Page 1"); 
    JPanel panel = new JPanel(); 
    panel.add(label); 
    add(panel); 
} 

記住,JPanelContainer類型,它可以有子組件。

0

獲取幀的內容窗格和比嘗試添加:

Container container=frame.getContentPane(); 
container.add(panel); 

希望這可以幫助你。

+0

從Java 1.5開始,'add'會自動重定向到'getContentPane()。add' – MadProgrammer