Я действительно борюсь с созданием сложного макета. Вот изображение того, что я хочу в конце: Java LayoutManagers с JPanels
Я попытался разделить и победить, создавая небольшие панели и помещая их в другие панели. Сначала я вычислил borderlayout для основной панели контейнера, которая находится в исходном JFrame, с кучей GridBagLayouts для деталей в этих панелях. Когда это не сработало, я подумал, что я попробую свою руку в любом GridBagLayout. Прямо сейчас моя цель - отобразить верхнюю группу панелей/карт персонажа и местоположения в их правильном соотношении сторон (около 4: 3) и правильно изменить размер (поддерживая соотношение сторон как можно лучше) при изменении размера окна , То, что я получаю, это супер маленькая квадратная панель для каждой карты, когда открывается окно. Я хочу, чтобы они начинались с соотношения сторон (4: 3).
Я правильно понял?
Должен ли я придерживаться всех GridBagLayouts?
Если нет, то какие комбинации макетов вы видите, что может сработать?
И наконец, возможно, самое главное, почему они не начинаются с правильной ширины сетки или сетки?
Было бы неплохо, если бы все карты поддерживали соотношение сторон 4: 3 или 3: 4, когда окно около 4: 3.
public class OverPower {
public static void main(String[] args) {
JFrame table = new JFrame();
table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table.setLayout(new BorderLayout());
JPanel contentPane = new OppCharsPanel();
table.setContentPane(contentPane);
table.setLocationByPlatform(true);
table.pack();
table.setLocationRelativeTo(null);
table.setVisible(true);
}
}
public class OppCharsPanel extends JPanel {
public OppCharsPanel() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(20, 15, 20, 15);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = 4;
gbc.gridheight = 3;
gbc.weightx = 4.0;
gbc.weighty = 3.0;
//back row
gbc.gridx = 4;
gbc.gridy = 0;
JPanel oppHomebase = new JPanel();
oppHomebase.setBackground(Color.RED);
this.add(oppHomebase, gbc);
gbc.gridx = 8;
gbc.gridy = 0;
JPanel oppReserve = new JPanel();
oppReserve.setBackground(Color.RED);
this.add(oppReserve, gbc);
//front row
gbc.gridx = 0;
gbc.gridy = 3;
JPanel oppBattlesite = new JPanel();
oppBattlesite.setBackground(Color.RED);
this.add(oppBattlesite, gbc);
gbc.gridx = 4;
gbc.gridy = 3;
JPanel oppChar1 = new JPanel();
oppChar1.setBackground(Color.RED);
this.add(oppChar1, gbc);
gbc.gridx = 8;
gbc.gridy = 3;
JPanel oppChar2 = new JPanel();
oppChar2.setBackground(Color.RED);
this.add(oppChar2, gbc);
gbc.gridx = 12;
gbc.gridy = 3;
JPanel oppChar3 = new JPanel();
oppChar3.setBackground(Color.RED);
this.add(oppChar3, gbc);
}
}
Я думаю, что ваша идея начать работу с отдельными компонентами была правильной, но используйте GridBagLayout для выкладки подкомпонентов – MadProgrammer
@MadProgrammer не то, что я делаю в моем представленном коде ??? –
Уверен, но сломайте его, у вас есть 4 основных контейнера, в пределах которых есть два подконтейнера, а у вас есть фактический контент, посмотрите на каждый слой по очереди и сосредоточьтесь на этих требованиях отдельно. – MadProgrammer