2009-12-07 2 views
0

Есть ли способ добавить элементы в gridlayout, который добавляет их по горизонтали, а не по вертикали? В основном я хочу заполнить целую строку элементами, прежде чем она начнется со следующего.Java GridLayout

Надеюсь, я сделал свой вопрос понятным.

+0

Так работает GridLayout. Каждый столбец заполняется до начала следующей строки. Если, конечно, вы не укажете один столбец, и в этом случае все компоненты будут добавлены друг под другом. Если вам нужна дополнительная помощь, отправьте свой SSCCE. (http://sscce.org) – camickr

ответ

2

Я хотел бы предложить GridBagLayout и GridBagConstraints

Это. много как GridLayout, но с GridBagConstraints вы можете задать координаты х и у компонента, и вы можете сделать столбцы и строки пролетов

это будет выглядеть примерно так:.

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

GridBagLayout layout = new GridBagLayout(); 
GridBagConstraints c = new GridBagConstraints(); 

JPanel panel = new JPanel(); 
JLabel label = new JLabel("foo"); 

panel.setLayout(layout); 

c.gridx = 0; 
c.gridy = 0; 
panel.add(label, c); 
+0

Это похоже на что-то действительно полезное. Является ли x и y местоположением ячейки в «таблице»? – ev00l

+0

Да, это координаты ячейки. Не пиксельные координаты контейнера. – jonescb

+0

Работает как очарование. У меня есть цикл for, где я устанавливаю x и y перед добавлением каждого элемента. Большое спасибо! – ev00l

0

GridLayout, как следует из названия, содержит компоненты в соответствии с количеством столбцов и строк, указанными в constructor, и перейдет к следующей строке, как только вы добавите указанное количество компонентов.

С вашего вопроса, похоже, что FlowLayout больше соответствует тем, что вы ищете.

Edit: Я не знаю, почему, но если указать количество строк, как 0 (например new GridLayout(0, 9), кажется, работает правильно

+0

ну, я попробовал добавить 5 текс-полей к 9x9 gridlayout, и они находятся друг над другом, а не бок о бок. Таким образом, он сначала заполняет колонку, а затем переходит к следующей coloumn, что я хочу, сначала заполняет строки: D – ev00l

0

Я предполагаю, что вы хотели сказать, что хотите заполнить все строки в столбце, прежде чем переходить к следующему столбцу. Если это так, то использовать диспетчер компоновки

VerticalGridLayout

0

На самом деле вы должны использовать GroupLayout Это новый (с JDK 1.6) и довольно удивительным. Это дает вам массу гибкости в макете.

+0

Благодарим за отзыв: D – ev00l