2013-12-23 5 views
0

Я создаю рамку GridLayout с 2 строками и 3 столбцами. Я поместил 3 JLabel в первую строку и каждую колонку. Когда я пытаюсь запустить, третья метка находится во второй строке и первом столбце, как показано нижеКомпоненты в GridLayout не отображаются должным образом

screenshot

Почему это происходит?

Вот код

JFrame windows = new JFrame("Shop"); 
    windows.setLayout(new GridLayout(2,3)); 
    JLabel prodlabel = new JLabel("Products"); 
    windows.add(prodlabel); 
    JLabel spacelabel = new JLabel(" mid "); 
    windows.add(spacelabel); 
    JLabel shoplabel = new JLabel("Shopping List"); 
    windows.add(shoplabel); 
    windows.setSize(1360, 728); 
    windows.setVisible(true); 
+0

Используйте 'Box', он будет поддерживать предпочтительные размеры. См. ['Этот ответ'] (http://stackoverflow.com/a/20737349/2587435), чтобы узнать, как использовать« Коробку », это просто! –

ответ

1

Это связано с тем, как ведет себя GridLayout, когда обе строки и столбцы установлены на ненулевые значения. LayoutManager принимает решение о подсчете столбцов в зависимости от количества строк и количества компонентов контейнера.

Вы можете установить количество строк в 0 и установить столбцы на 3. LayoutManager добавит больше строк при добавлении в контейнер дополнительных компонентов.

windows.setLayout(new GridLayout(0,3)); 

Edit: Формулировки и here's a link to the Java Tutorial on GridLayout which may or may not have more information related to the matter.

0

Это происходит потому, что вы используете GridLayout который resise компонент для всей клетки (по вертикали/горизонтали) и при добавлении компонента в том, что он ставит их один на один во-первых место компонентов грести и они переключают столбцы, когда строка заполнена. Вам нужно использовать другой LayoutManager.

Например, попробуйте использовать GridBagLayout.

Или вы можете исправить это, используя одну строку new GridLayout(1,3).

0

Вы устанавливаете макет для 6 элементов. Попробуйте добавить все 6 элементов и запустите его

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