Я пытаюсь создать массив кнопок и добавить их в GridLayout
, но по какой-то причине сетка не рисуется правильно, если я делаю ее больше, чем примерно на 5 на 5. Если она находится между около 7 на 7 и 10 на 10, сетка не заканчивается. Если это выше, то кнопки очень широкие и отображаются в вертикальном столбце, а не в сетке, и он простирается от верхней и нижней части экрана.GridLayout не отображается правильно
Мой код:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame implements ActionListener {
JButton[] btns = new JButton[49];
GUI(String title){
super(title);
this.init();
this.setSize(500, 500);
this.setVisible(true);
this.setLocationRelativeTo(null);
}
void init() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(7, 7));
for (int btnadder = 0; btnadder < 49; btnadder++) {
btns[btnadder] = new JButton("");
panel.add(btns[btnadder]);
btns[btnadder].setBackground(Color.white);
}
this.add(panel);
}
}
7x7 = 49, но вы только заполняете 25 пробелов, выходите налево над пробелами. GridLayout заполнит каждую ячейку компонентом t на основе доступного пространства, так что каждый столбец и строка будут разделены поровну, вот как это делается. – MadProgrammer
Не вызывайте 'setSize (...)', а скорее позволяйте графическому интерфейсу установить его собственный размер на основе соответствующих предпочтительных размеров его компонентов и менеджеров компоновки. Вместо этого вызовите 'pack()' в окне верхнего уровня после добавления компонентов и до установки видимости. И избегайте «волшебных» чисел, таких как 25 и 49. Пусть Java рассчитает это число для вас на основе строк и столбцов. –