Я устанавливаю панель содержимого JFrame на панель, которую я создал. Эта панель использует Grid Bag Layout
для последующих панелей. Я установил этот макет так:
private void initPanel() {
setLayout(new GridBagLayout());
constraints = new GridBagConstraints();
populateGUI();
}
Это заставляет «игру» выглядеть так:
Что я на самом деле пытаюсь сделать, так это расширить эти панели (крошечные квадраты). Размеры JFrame составляют 800 x 500, поэтому каждая панель должна занимать 100 x 100, что в сумме составляет 40 панелей. Проблема в том, что панели слишком малы.
Я заполняю панель содержимого JFrame (заменена собственной панелью, отмеченной красным) с помощью этого кода:
private void populateGUI() {
// Fill the frame with panels
for (int rowPos = 0; rowPos < numColumns; rowPos++) {
for (int colPos = 0; colPos < numRows; colPos++) {
constraints.gridx = rowPos;
constraints.gridy = colPos;
// Add component
add(new GameDummyPanel(gameUtil.generateRandomColour(),
panelWidth, panelHeight), constraints);
}
}
}
Примечание. Это единственные ограничения, которые я реализую. В классе GameDummyPanel я устанавливаю размер следующим образом:
public GameDummyPanel( Color panelColor, int panelWidth, int panelHeight )
{
dummyPanelWidth = panelWidth / 8;
dummyPanelHeight = panelHeight / 5;
setBackground( panelColor );
setSize( new Dimension( dummyPanelWidth, dummyPanelHeight ) );
}
так почему это не соблюдается? Это не похоже на то, что я вызываю пакет на панели и на панели, которая действует как панель содержимого JFrame.
Спасибо
Обновить
Изучив и реализовав ответы, что необходимо сделать — если вы не хотите читать ниже — установить для свойства fill
ограничений значение BOTH
и удалить все свойства, основанные на размере, из класса панели. Это означает, что мои ограничения выглядят так:
constraints = new GridBagConstraints();
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.fill = GridBagConstraints.BOTH;
Минус фактически уникальное позиционирование для каждой из панелей, настроенных gridx
и gridy
. реализацию JPanel можно было бы фактически покончить с созданием JPanel на лету.