简体   繁体   English

JPanel不显示在JFrame上

[英]JPanel does not displayed on JFrame

Problem - the given codes below is not displaying my JPanel(PageOne) and I am not sure why is it not displaying my JPanel(PageOne). 问题-以下给定的代码未显示我的JPanel(PageOne),我不确定为什么不显示我的JPanel(PageOne)。 Please Help. 请帮忙。

I have added the JPanel(PageOne) to my panel which has a cardLayout(); 我已经将JPanel(PageOne)添加到具有cardLayout()的面板中; I have set my JFrame to visible already. 我已经将JFrame设置为可见。

PageOne.java 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 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 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);
               }
           });
       }
   }

You're not actually adding anything to PageOne or PageTwo panels... 您实际上并没有在PageOnePageTwo面板中添加任何内容...

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

Unless you "really" need it, you can get rid of the second JPanel and add the label directly to PageOne (and the same thing goes for PageTwo ) 除非您“真的”需要它,否则您可以摆脱第二个JPanel并将label直接添加到PageOne (对PageTwo来说也是PageTwo

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

Or add the JPanel you create (which contains the label) 或添加您创建的JPanel (包含标签)

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

Remember, JPanel is type of Container , it can have child components. 记住, JPanelContainer类型,它可以具有子组件。

Get the content pane of frame and than try adding : 获取框架的内容窗格,然后尝试添加:

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

Hope this helps you. 希望这对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM