JLabel не появляется

Я работаю над программой, но мой JLabel не появляется. Мой JButton работает отлично (он появляется), но по какой-то причине JLabel не появляется. Я проверил в Интернете, но я ничего не нашел.

package com.hinx.client; import java.awt.Color; import javax.swing.*; public class Main { public static void main(String [] args) { createWindow(); } static void createWindow() { //Create panel JPanel content = new JPanel(); content.setLayout(null); //Build the frame JFrame frame = new JFrame("Hinx - A marketplace for apps - Client ALPHA_0.0.1"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(700, 400); frame.setResizable(false); frame.setLocationRelativeTo(null); frame.add(content); frame.setVisible(true); //Add the login button JButton login = new JButton("Login"); login.setBounds(0, 342, 150, 30); //Create login label JLabel loginlabel = new JLabel("Login Area"); //Create login panel JPanel loginpanel = new JPanel(); loginpanel.setLayout(null); loginpanel.setBounds(0, 0, 150, 400); loginpanel.setBackground(Color.gray); loginpanel.add(login); loginpanel.add(loginlabel); content.add(loginpanel); } } 

Установите layout panel . Например:

 loginpanel.setLayout(new BorderLayout()); 

Здесь вы можете узнать больше о макетах.

Вот что я получаю: введите описание изображения здесь

Я проверил в Интернете, но я ничего не нашел.

  • JFrame видна до того, как JComponents ( frame.add(content); ) добавлены / созданы

  • move code line frame.setVisible(true); (лучше все о JFrame) до конца constuctor

  1. Используйте макеты. В этом случае FlowLayout должен быть хорошим. Не вызывайте setBounds() и не устанавливайте макет как null .

  2. Добавить ярлык и кнопку на JPanel

  3. Затем добавьте JPanel на JFrame

  4. Call pack() вместо setSize()

  5. Вызов setVisible(true) в конце.

Удачи!

Вы делаете setLayout null .

  JPanel loginpanel = new JPanel(); loginpanel.setLayout(null); 

Использовать это,

  JPanel loginpanel = new JPanel(); loginpanel.setLayout(new BorderLayout()); 

Запустите пользовательский интерфейс на EDT вместо запуска в основном streamе. Прочтите этот пост .

Пример:

 public static void main(String [] args) { Runnable r = new Runnable() { @Override public void run() { createWindow(); } }; EventQueue.invokeLater(r); }