Попытка выяснить, как сохранить соотношение размеров между этими двумя панелями 3: 1.
Как выглядит, когда я просто добавляю два JPanels в GridBagLayout с правильными ограничениями:
И вот как выглядит код:
class MainPanel extends JPanel {
MainPanel() {
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridwidth = GridBagConstraints.RELATIVE;
constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.weightx = 3;
constraints.weighty = 1;
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 0;
constraints.gridy = 0;
JPanel pane1 = new JPanel();
pane1.setBackground(Color.GRAY);
add(pane1, constraints);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridx = 3;
constraints.gridy = 0;
constraints.weightx = 1;
JPanel pane2 = new JPanel();
pane2.setBackground(Color.DARK_GRAY);
add(new RightPanel(), constraints);
}
}
Но потом, как только я начинаю добавлять такие вещи, как JButtons или JLabels справаПанель, соотношение 3: 1 полностью забыто, и правая панель, кажется, занимает произвольное количество места, независимо от того, насколько маленькими я создаю объекты внутри нее.
Вот как это выглядит:
И вот как выглядит код:
class RightPanel extends JPanel {
class ComboPanel extends JPanel {
ComboPanel(String labelText) {
JTextField textField = new JTextField();
textField.setPreferredSize(new Dimension(80, 30));
add(new JLabel(labelText));
add(textField);
}
}
RightPanel() {
Box componentBox = Box.createVerticalBox();
add(componentBox);
JLabel currentPosX = new JLabel("Current X position: ( X )");
currentPosX.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel currentPosY = new JLabel("Current Y position: ( Y )");
currentPosY.setAlignmentX(Component.CENTER_ALIGNMENT);
Box positionBox = Box.createVerticalBox();
positionBox.add(currentPosX);
positionBox.add(Box.createRigidArea(new Dimension(0, 5)));
positionBox.add(currentPosY);
positionBox.add(Box.createRigidArea(new Dimension(0, 10)));
positionBox.setBackground(Color.LIGHT_GRAY);
positionBox.setOpaque(true);
componentBox.add(positionBox);
componentBox.add(Box.createRigidArea(new Dimension(0, 5)));
ComboPanel comboPanelX = new ComboPanel("Target X Position: ");
comboPanelX.setAlignmentX(Component.CENTER_ALIGNMENT);
componentBox.add(comboPanelX);
componentBox.add(Box.createRigidArea(new Dimension(0, 5)));
ComboPanel comboPanelY = new ComboPanel("Target Y Position: ");
comboPanelY.setAlignmentX(Component.CENTER_ALIGNMENT);
componentBox.add(comboPanelY);
componentBox.add(Box.createRigidArea(new Dimension(0, 5)));
JButton commandButton = new JButton("Move");
commandButton.setAlignmentX(Component.CENTER_ALIGNMENT);
componentBox.add(commandButton);
}
}
Я хотел бы знать, есть ли способ добавить материал вJPanel справа без перекручивания соотношения размеров между двумя основными панелями.