2014-07-09 177 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