JPanel не будет отображать компоненты при нулевом макете

Я пытаюсь создать графический интерфейс, и я хочу разместить элементы в определенных местах. Я сделал макет моей панели нулевым, чтобы я мог сделать это. Тем не менее, ничего не появится, когда панель пуста.
Вот код:

public class OverView extends JFrame {

    //height and width of screen
    Toolkit tk = Toolkit.getDefaultToolkit();
    int x = ((int) tk.getScreenSize().getWidth());//length of screen
    int y = ((int) tk.getScreenSize().getHeight());//height

    //components
    private JLabel title;
    private JLabel description;
    private JPanel panel;
    private ArrayList<JButton> farms;

    //farm variables
    public ArrayList<Farm> owned;


    public OverView(ArrayList<Farm> owned) {
        super("The Lolipop Farm - Overview");
        setSize(700, 700);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);

        //initialize variables
        this.owned = owned;
        panel = new JPanel();
        panel.setLayout(null);
        title = new JLabel("<html>Your Farms - The Lolipop Farm"
                + "<br> <font size=1000> <i> An Eph Production </i> </font></html>");

        //set background color, color, and font of JComponents
        title.setFont(new Font("serif", Font.BOLD, 25));
        title.setBackground(Color.GRAY);
        title.setOpaque(true);

        //set size and location of the components
        title.setSize(350, 120);
        title.setLocation(x / 2, 600);

        //add to panel
        panel.add(title);

        //add panel to the screen
        add(panel);         

    }

}

Почему на панели ничего не отображается, когда макет пуст?

2 ответа

Поскольку Overview - это Frame, я думаю, вы должны вызвать метод

setVisible(true);

в соответствии с https://docs.oracle.com/javase/tutorial/uiswing/layout/using.html, чтобы сделать его видимым. Теперь, если это не сработает, мне интересно, если вы создали экземпляр класса Overview где-то еще в вашем коде или в методе Main. Если нет, то нет объекта, который мог бы показать панель внутри вашего класса, поэтому ваша программа ничего не покажет.

Ваша проблема с кодом

setLayout(null);

Это установит макет JFrame в ноль, так как вы расширяете (наследуете его). У вас должен быть макет для JFrame, хотя вы можете обойтись без макета для JPanel. Просто удалите эту строку, и все будет хорошо.

РЕДАКТИРОВАТЬ: И, конечно, вам нужно вызвать setVisible(true), как сказал другой парень.

Другие вопросы по тегам