Класс JPanel не добавляется в JFrame

Я не могу заставить свой JFrame из основного класса отображать JPanel из другого класса. Все компилируется без ошибок. Это код моего основного класса, который расширяет JFrame:

public OnlineCarSalesSystem(){
    setTitle("Online Car Sales System");
    setVisible(true);
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    setLayout(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    add(new Login());
}

public static void main(String[] args) {
    new OnlineCarSalesSystem();
}

В приведенном выше коде я добавил add(new Login());, но эта панель не отображается в моем JFrame. И в приведенном ниже коде я расширил свой класс с помощью JPanel. А это код класса JPanel:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Login extends JPanel{
    JLabel loginLabel = new JLabel("Login ID");
    JLabel passwordLabel = new JLabel("Password");
    JTextField loginTextField = new JTextField();
    JPasswordField passwordTextField = new JPasswordField();
    JButton submitButton = new JButton("Submit");
    JButton registration = new JButton("new Registration");
    JLabel noaccountLabel = new JLabel("No Account yet!!!");
    public void Login(){
        setBounds(0,0,500,500);
        setBackground(Color.red);
        setVisible(true);
        loginLabel.setBackground(Color.cyan);
        passwordLabel.setBackground(Color.cyan);
        loginTextField.setBounds(680, 103,90,20);
        add(loginTextField);
        loginLabel.setBounds(600, 100,90,30);
        add(loginLabel); 
        passwordTextField.setBounds(680, 153,90,20);
        passwordTextField.setEchoChar('*');
        add(passwordTextField);
        passwordLabel.setBounds(600, 150,90,30);
        add(passwordLabel); 
        add(submitButton);
        submitButton.setBounds(640,200,90,30);
        submitButton.addActionListener(new ActionListener() {   //////Submit Button
            public void actionPerformed(ActionEvent e) {

            }
        });
        add(registration);
        registration.setBounds(638,270,96,30);
        add(noaccountLabel);
        noaccountLabel.setBackground(Color.cyan);
        noaccountLabel.setBounds(640,250,90,30);
        registration.addActionListener(new ActionListener() {   //////registration Button
            public void actionPerformed(ActionEvent e) {

            }
        });
    }
}

person suyash    schedule 17.09.2019    source источник
comment
1) Чтобы быстрее получить помощь, изменить, чтобы добавить минимальный воспроизводимый пример или Короткий, автономный, правильный пример. 2) Графические интерфейсы Java должны работать с разными ОС, размером экрана, разрешением экрана и т. д., используя разные PLAF в разных регионах. Как таковые, они не способствуют идеальной компоновке пикселей. Вместо этого используйте менеджеры макетов или их комбинации вместе с отступами и границами макета для пробел. но эта панель не отображается Вероятная причина - макет null.   -  person Andrew Thompson    schedule 17.09.2019
comment
3) public void Login(){ Если вы предполагаете, что в качестве конструктора это должно быть public Login(){..   -  person Andrew Thompson    schedule 17.09.2019
comment
4) Здесь нет веской причины расширять JFrame или JPanel. Кроме того, учитывая, что это вход в систему, фрейм вместо этого должен быть JDialog или JOptionPane.   -  person Andrew Thompson    schedule 17.09.2019


Ответы (1)


Проблема в том, что Login()-функция не выполняется ни в одной точке кода. Возможно, вы захотите изменить

public void Login() { ... }

to

public Login() { ... }

поэтому код запускается при инициализации объекта

person nah0131    schedule 17.09.2019