Как исправить управление макетом - PullRequest
0 голосов
/ 21 апреля 2019

Я делаю клон Minesweeper в Java.Все было хорошо, но я хотел добавить счетчик сверху.А теперь некоторые кнопки за пределами экрана.Какие раскладки я должен изменить, чтобы исправить это?

Перед добавлением счетчика: (https://i.imgur.com/cSKmCGr.jpg)

После добавления счетчика (https://i.imgur.com/fbMQqQz.jpg)

А вот мой код:

public static JPanel generate() {
            i2w = row*row-ilosc_min;

            przyc = new Sap[row][row];      
            JPanel all = new JPanel();      //panel that contains counter and buttons
            JPanel licznik = new JPanel();  //Counter
            licznik.setBackground(Color.red);
            licznik.setPreferredSize(new Dimension(MyFrame.wym-50, 50));    //counter takes 50 px height and full width of frame

            all.add(licznik);

            JPanel panel = new JPanel();    //Buttons panel
            panel.setVisible(true);
            panel.setLayout(new GridLayout(row, row));                  

            for(int x = 0; x < row; x++) {  //creating buttons
                for(int y = 0; y < row; y++) {
                    Sap sp = new Sap(x, y); //My buttons that extends JButton
                    przyc[x][y] = sp;       
                    panel.add(sp);          //Adding button to panel
                }
            }
            all.add(panel);                 //All contains counter and buttons

            return all;                     //Returning it
        }

Когда я не создаю панель счетчика, кнопки такие же, как на втором фото.

Извините за любые ошибки, английский не является моим основным языком.

1 Ответ

0 голосов
/ 21 апреля 2019

сначала вы знаете, какой макет был по умолчанию для обеих ваших панелей?и самое короткое рабочее решение состоит в том, чтобы заставить корневую панель использовать BorderLayout, а при добавлении встречного вызова к объекту корневой панели

add(BorderLayout.NORTH,theCounterObject);

и для панели кнопки также вызывать это на корневой панели

add(BorderLayout.CENTER,theButtonsPanel);

это решит проблему в сокращенной версии, но лучше узнать не глоток или часть, а все о менеджерах компоновки, так как они очень важны для свинга, вот начало Визуальное руководство для менеджеров по макету .

метод pack() не является необходимым, но это отличный способ получить идеальный размер, это была хорошая идея из комментария, но проблема была в том, что ваш макет был FlowLayout, и он по умолчанию для панелино вы должны сделать это после изменения макета.

...