Почему не видна кнопка в окне на java

import javax.swing.*; //импорт методов из пакета
import java.awt.*; //импорт методов из пакета

public class Test_1 extends JFrame { // создаём класс и наследуем его от JFrame
    JButton button = new JButton("Button"); //создаём кнопку

    Test_1() { //делаем конструктор
        super("Games Catalog"); // название программы
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); // набор дефолтных прав для вычесления размера экрана
        setBounds(dim.width/4, dim.height/4,dim.width/2,dim.height/2); //установка размера и положения JFrame
        setDefaultCloseOperation(EXIT_ON_CLOSE); // что бы программа закрывалась
        button.setBounds(dim.width / 2,dim.height / 2,dim.width / 8, dim.height/16); // положение и размер кнопки

        Container container = this.getContentPane(); // контейнер (точно не понимаю зачем он наверное что бы элементы в нём были видимыми)

        // container.add(button); //добавление в контейнер кнопки (по идее что бы она была видимая)

        JPanel panel = new JPanel(); // в душе не чаю зачем
        panel.add(button);
        panel.setLayout(null); // что бы layouts были с значением null (типа выключаем horizontal vertical layout)
        container.add(panel);
        setVisible(true); // что бы программа была видимая (точно не знаю)
    }

    public static void main(String[] args) { // главный метод для запуска программы
        Test_1 run = new Test_1(); // этот код отвечает за то что бы программа запустилась
        run.setVisible(true); // этот код отвечает за то что бы программа запустилась
    }
}

Можете у себя в IDE вставить этот код и при запуске посередине экрана будет появляться окно, а кнопки не видно (видно только когда разворачиваешь окно во весь экран)
Кто сталкивался подскажите что делать?
Желательно кодом и объяснениями


Ответы (1 шт):

Автор решения: Perfect Voyage

Нужно убрать вот эту строчку

panel.setLayout(null);

Когда вы ставите null ваш panel грубо говоря превращается в "1" (0x0) пиксель, в котором висит button,соответственно ни того, ни другого вы не видите.

Так же, ваш конструктор слишком длинный и непонятный.

Вот эти строки можно выкинуть в отдельный метод

 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); // набор дефолтных прав для вычесления размера экрана
        setBounds(dim.width/4, dim.height/4,dim.width/2,dim.height/2); //установка размера и положения JFrame
        setDefaultCloseOperation(EXIT_ON_CLOSE); // что бы программа закрывалась
        button.setBounds(dim.width / 2,dim.height / 2,dim.width / 8, dim.height/16); // положение и размер кнопки

Последняя строчка в конструкторе так же не нужна

setVisible(true); // что бы программа была видимая (точно не знаю)

Поскольку вы уже используете

 run.setVisible(true);

По поводу контейнера, вам лучше погуглить я думаю в интернете полно ресурсов об описании архитектуры приложений на swing

→ Ссылка