2013-08-29 3 views
-1

Я пытаюсь создать массив кнопок и добавить их в 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); 
    } 
} 
+2

7x7 = 49, но вы только заполняете 25 пробелов, выходите налево над пробелами. GridLayout заполнит каждую ячейку компонентом t на основе доступного пространства, так что каждый столбец и строка будут разделены поровну, вот как это делается. – MadProgrammer

+0

Не вызывайте 'setSize (...)', а скорее позволяйте графическому интерфейсу установить его собственный размер на основе соответствующих предпочтительных размеров его компонентов и менеджеров компоновки. Вместо этого вызовите 'pack()' в окне верхнего уровня после добавления компонентов и до установки видимости. И избегайте «волшебных» чисел, таких как 25 и 49. Пусть Java рассчитает это число для вас на основе строк и столбцов. –

ответ

1

Когда он установлен между 7 и 10 вы меняете

for (int btnadder = 0; btnadder < 25; btnadder++) 

для учета большего количества кнопок?

+0

Ох ... Я забыл это сделать. Однако проблема все еще остается для больших сеток. Я сейчас отредактирую эту ошибку. – EyedJellyfish

+0

На самом деле, теперь я понимаю, что это была основная проблема. Я не знаю, почему другая проблема происходила раньше, но, похоже, она прекратилась. – EyedJellyfish

+1

Вы не должны использовать [магические числа] (http://en.wikipedia.org/wiki/Magic_number_ (программирование) #Unnamed_numerical_constants) – redFIVE

1

Почему вы не установили менеджер компоновки для JFrame, который не расширяется компоненты внутри?

Кроме этого, я не понимаю вопроса. Что вы хотите? 49 кнопок в компоновке 7x7?

Кроме того, я замечаю, что вы не используете this.pack() до this.setVisible(true);, и вы не устанавливаете размер кнопок и не устанавливаете их ярлык. Попробуйте хотя бы что-то вроде new JButton(""+btnadder);

Я внесла эти исправления, и у меня есть хороший JFrame на моем дисплее прямо сейчас. Опять же, я точно не знаю, чего вы ожидаете.

Смежные вопросы