Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPanel添加到JFrame?_Java_Swing_Jframe_Jpanel_Jlabel - Fatal编程技术网

Java 将JPanel添加到JFrame?

Java 将JPanel添加到JFrame?,java,swing,jframe,jpanel,jlabel,Java,Swing,Jframe,Jpanel,Jlabel,我正在尝试将JLabel添加到JFrame的JPanel中。我为JPanel设置了边框,但是我在JFrame上看到的只是我的框架中心的一个黑色小正方形。无论我做什么,我都不能改变它的大小或位置。请帮忙 Start main = new Start(); Random random = new Random(); JFrame mainFrame = new JFrame("MainFrame"); JPanel mainPanel = new JPanel();

我正在尝试将JLabel添加到JFrame的JPanel中。我为JPanel设置了边框,但是我在JFrame上看到的只是我的框架中心的一个黑色小正方形。无论我做什么,我都不能改变它的大小或位置。请帮忙

    Start main = new Start();
    Random random = new Random();

    JFrame mainFrame = new JFrame("MainFrame");
    JPanel mainPanel = new JPanel();
    JLabel welcomeLabel = new JLabel();

    mainFrame.add(main);
    mainFrame.setLayout(new GridBagLayout());
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setTitle(names[random.nextInt(names.length)]);
    mainFrame.pack();
    mainFrame.setVisible(true);
    mainFrame.setSize(mainFrameX, mainFrameY);
    mainFrame.setResizable(false);
    mainFrame.setLocationRelativeTo(null);
    mainFrame.add(mainPanel);

    mainPanel.add(welcomeLabel);
    mainPanel.setBorder(new LineBorder(Color.BLACK));
    mainPanel.setSize(new Dimension(200, 200));

    welcomeLabel.setFont(new Font("Verdana", 1, 20));
    welcomeLabel.setLocation(100, 100);

    main.start();
建议:

  • 您需要阅读本教程,因为它将解释如何使用Swing布局管理器进行编码,而这些信息对于解决当前的问题至关重要
  • 一个警告:我敦促您避免使用空布局的诱惑,因为使用它将导致创建非常难以维护或升级的代码
  • 您的JLabel welcomeLabel当然需要一些文本才能显示
  • 不要通过setLocation(…)设置它的位置,但要再次使用布局管理器来完成放置和调整组件大小的繁琐工作
  • 在添加所有初始组件后,还需要在JFrame上调用pack()和setVisible(true)
      气垫船是正确的(+1),请确保您了解布局管理器的工作原理

      做事的顺序很重要,尤其是在处理顶级容器时

      Start main = new Start();
      Random random = new Random();
      
      JFrame mainFrame = new JFrame("MainFrame");
      JPanel mainPanel = new JPanel();
      JLabel welcomeLabel = new JLabel();    
      
      welcomeLabel.setFont(new Font("Verdana", 1, 20));
      
      mainPanel.add(welcomeLabel);
      mainPanel.setBorder(new LineBorder(Color.BLACK));
      
      // Do this first
      mainFrame.setLayout(new GridBagLayout());
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.setTitle(names[random.nextInt(names.length)]);
      
      // Add your components
      mainFrame.add(main);
      mainFrame.add(mainPanel);
      
      // Prepare the window for showing, now you have some content.
      mainFrame.setResizable(false);
      mainFrame.pack();
      mainFrame.setVisible(true);
      mainFrame.setLocationRelativeTo(null);
      
      main.start();
      
      这仍然只会在窗口中生成一个小的黑色正方形,因为
      JLabel
      没有内容,因此它的首选大小是(类似)2x2(因为边框)

      尝试将一些文本添加到

      welcomeLabel.setText("Welcome");
      
      然后看看区别