将JPanel添加到JFrame?

时间:2013-07-17 22:36:21

标签: java swing jframe jpanel jlabel

我正在尝试将JLabel添加到JPanel到JFrame。我为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();

2 个答案:

答案 0 :(得分:2)

建议:

  • 您将需要阅读教程Laying out Components,因为它将解释如何使用Swing布局管理器进行编码,此信息对于解决当前问题至关重要。
  • 一个警告:我建议你避免使用null布局的诱惑,因为使用它会导致创建很难维护或升级的代码。
  • 你的JLabel,welcomeLabel,当然需要一些文字可见。
  • 不要通过setLocation(...)设置它的位置,而是再次使用布局管理器来执行放置和调整组件大小的脏工作。
  • 在添加所有初始组件后,您还需要在JFrame上调用pack()和setVisible(true)。

答案 1 :(得分:0)

Hovercraft是对的(+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");

然后看看差异