Я делаю KenKen в качестве моего проекта термина, используя библиотеку java swing. Для выравнивания я использовал gridbag и gridlayout, но теперь я хочу добавить еще один компонент JPanel в пользовательский интерфейс. Эти скриншоты прояснят проблему:
Прежде чем я нажму на кнопку в нижней панели ниже http://i41.tinypic.com/288jo9.png
Теперь я выбираю ячейку сетки, в которую я хочу добавить соответствующих кандидатов в самой левой панели.
Вот что происходит, когда я нажимаю цифровые кнопки 2, 3, 4 http://i41.tinypic.com/14scr9e.png
Это нарушает соседние выравнивания сетки и панелей.
Вот панели с соответствующими компоновками:
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 4, 5, 5));
buttonPanel.setPreferredSize(new Dimension(20,40));
buttonPanel.add(undoButton);
buttonPanel.add(redoButton);
buttonPanel.add(eraseButton);
buttonPanel.add(hintButton);
JPanel cellPanel = new JPanel();
cellPanel.setName("cellPanel");
cellPanel.setLayout(new GridLayout(pSize, pSize, 0, 0));
JPanel numPanel = new JPanel();
numPanel.setName("numPanel");
numPanel.setLayout(new GridLayout(1,1,5,5));
numPanel.setPreferredSize((new Dimension(50,60)));
JPanel candPanel = new JPanel();
candPanel.setName("candidatesPanel");
JLabel candidates = new JLabel("Candidates");
candidates.setFont(new Font("Courier New", Font.ITALIC, 14));
candidates.setForeground(Color.GRAY);
candPanel.setLayout(new GridLayout(0,1));
candPanel.add(candidates);
Тогда все это переходит в панель содержимого:
content.add(buttonPanel, pos.nextCol().expandW());
content.add(candPanel, pos.nextRow());
content.add(new Gap(GAP) , pos.nextRow()); // Add a gap below
content.add(cellPanel, pos.nextCol());
content.add(numPanel,pos.nextCol().expandW());
Все кнопки генерируются во время выполнения и добавляются в CandPanel в прослушивателе действий.