Вы не в состоянии указать любые weightx
и weighty
значения в GridBagConstraints
. Кроме того, ваши значения gridwidth
ошибочны, так как это должно быть только 2
для самого нижнего JPanel
, для остальных это должно быть 1
.
Объяснение того, что я делаю: Рассмотрим JPanel
s BLUE
и RED
, они должны быть размещены вдоль X-AXIS в соотношении 70:30
, по отношению друг к другу (поэтому их weightx
будет 0.7
и 0.3
соответственно. Так как общая площадь вдоль X-AXIS составляет 1.0
).
Теперь оба этих BLUE
и RED JPanel
с должны быть расположены вдоль Y-AXIS, по отношению к третьему GREEN JPanel
в соотношении 90:10
Таким образом, оба этих BLUE
и RED
будут иметь weighty = 0.9
и GREEN JPanel
будет иметь weighty = 0.1
, но так как GREEN JPanel
предполагают занимать всю площадь (по отношению к X-AXIS), а занятая BLUE
и RED JPanel
с, по этому вопросу, его gridwidth = 2
и weightx = 1.0
.
Попробуйте этот пример кода:
import java.awt.*;
import javax.swing.*;
public class GridBagLayoutExample
{
private GridBagConstraints gbc;
public GridBagLayoutExample()
{
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
}
private void displayGUI()
{
JFrame frame = new JFrame("GridBagLayout Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = getPanel(Color.WHITE);
contentPane.setLayout(new GridBagLayout());
JPanel leftPanel = getPanel(Color.BLUE);
JPanel rightPanel = getPanel(Color.RED);
JPanel bottomPanel = getPanel(Color.GREEN.darker());
addComp(contentPane, leftPanel
, 0, 0, 0.7, 0.9, 1, 1, GridBagConstraints.BOTH);
addComp(contentPane, rightPanel
, 1, 0, 0.3, 0.9, 1, 1, GridBagConstraints.BOTH);
addComp(contentPane, bottomPanel
, 0, 1, 1.0, 0.1, 2, 1, GridBagConstraints.BOTH);
frame.setContentPane(contentPane);
//frame.pack();
frame.setSize(300, 300);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void addComp(JPanel panel, JComponent comp
, int gridX, int gridY
, double weightX, double weightY
, int gridWidth, int gridHeight, int fill)
{
gbc.gridx = gridX;
gbc.gridy = gridY;
gbc.weightx = weightX;
gbc.weighty = weightY;
gbc.gridwidth = gridWidth;
gbc.gridheight = gridHeight;
gbc.fill = fill;
panel.add(comp, gbc);
}
private JPanel getPanel(Color backColour)
{
JPanel panel = new JPanel();
panel.setOpaque(true);
panel.setBackground(backColour);
panel.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
return panel;
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new GridBagLayoutExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
Вот ВЫВОД того же:
это может быть работа именно для MigLayout, [но не вопрос для GBC, вы также можете установить процентное измерение для GBC] (http://stackoverflow.com/a/9015259/714968) – mKorbel
@mkorbel обновил изображение, пожалуйста, см. – varuog
Что на Земле по ssessed вы размещаете изображение с размерами 3,828px × 1,872px? См. [Как создать скриншоты?] (Http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post) (советы по созданию * большие скриншоты). –