У меня есть несколько JPanel, все из которых основаны на предположении, что они имеют ширину в три столбца. И один или несколько столбцов высотой. На данный момент я использую для них GridBagLayout.
Я планирую добавить их друг под другом в другой JPanel. Проблема в том, что столбцы не выстраиваются в линию.
Могу ли я что-то сделать с этим, сохраняя отдельные панели JPanel отдельно друг от друга? Не возвращаясь к более фиксированному макету. Я мог бы дать JPanels родительский контейнер и добавить в него элементы, оставив сам JPanel пустым (когда он не находится в «автономном режиме»). Но я считаю такой подход отвратительным.
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: мой класс макета выглядит так:
public class Layout extends GridBagLayout {
public void collocate_line(List<? extends JComponent> compos, final Container container) {
int currentCol = 0;
for (final JComponent compo: compos) {
final GridBagConstraints gbc = new GridBagConstraints(
currentCol, this.currentLine, GRID_WIDTH, GRID_HEIGHT,
DEFAULT_WEIGHT_X, DEFAULT_WEIGHT_Y, GridBagConstraints.CENTER,
GridBagConstraints.BOTH, DEFAULT_INSETS, 0, 0);
container.add(compo, gbc);
currentCol++;
}
currentLine++;
}
}
Содержащий JPanel выглядит так:
public class ScopePanel extends JPanel implements ActionListener {
private final ChooseClassPath classPath;
private final ChooseStubsJava stubsJava;
public ScopePanel(final IPreparedCommands exec, final ResourceBundle messages) {
super();
final Layout gbl = new Layout();
this.setLayout(gbl);
this.classPath = new ChooseClassPath(exec, messages, gbl);
this.add(this.classPath, GUIUtil.mkgbc_fillx(0, 0, GridBagConstraints.REMAINDER, 1));
this.stubsJava = new ChooseStubsJava(exec, messages, gbl);
this.add(this.stubsJava, GUIUtil.mkgbc_fillx(0, 2, GridBagConstraints.REMAINDER, 1));
}
}
И элемент выглядит так:
public class ChooseClassPath extends JPanel {
public ChooseClassPath(final IPreparedCommands exec, final ResourceBundle messages) {
this(exec, messages, new Layout());
}
public ChooseClassPath(final IPreparedCommands exec, final ResourceBundle messages, final Layout layout) {
super();
{ // Line 1
final List<JComponent> line = new ArrayList<JComponent>();
final JLabel label = new JLabel(messages.getString("label_classpath"));
line.add(label);
//...
layout.collocate_line(line, this);
}
}
}
Результат: