Вертикальное выравнивание компонентов jpanels с помощью GridLayout - PullRequest
3 голосов
/ 25 марта 2012

Я делаю 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 в прослушивателе действий.

1 Ответ

0 голосов
/ 26 сентября 2012

Вы, похоже, используете подкласс GridBagConstraints, о котором я не знаю (переменная pos), хотя я могу угадать его функцию из контекста.

Если ваша проблема в том, что вы хотите, чтобы панель candidates находилась слева от cellPanel, а не над ней, вам необходимо поменять местами строки, которые добавляют candPanel и new Gap(GAP) следующим образом :

content.add(buttonPanel, pos.nextCol().expandW());
content.add(new Gap(GAP), pos.nextRow());   // These two lines
content.add(candPanel, pos.nextRow());      // swapped over
content.add(cellPanel, pos.nextCol());
content.add(numPanel,pos.nextCol().expandW());
...