0

我正在尝试将 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();
4

2 回答 2

2

建议:

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

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

然后看看区别

于 2013-07-17T22:51:14.427 回答