Я играю с GridBagLayout
в Swing, и я заметил, что опорная точка слева правильная, а верхняя - в -60 пикселей. Я знаю точный размер окна, 960x640. Я делаю две колонки: одну с двумя панелями слева (высота сетки равна 2 для обоих), а другая с тремя панелями справа (высота сетки - 1, 2 и 1). Это код:Swing GridBagLayout anchor находится за пределами окна
gameFrame.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.NORTHWEST;
InfoPanel infoPanel = new InfoPanel();
infoPanel.setPreferredSize(new Dimension(320, 320));
infoPanel.setMinimumSize(new Dimension(320, 320));
infoPanel.setMaximumSize(new Dimension(320, 320));
infoPanel.setBackground(Color.BLUE);
constraints.gridx = 0;
constraints.gridy = 0;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel, constraints);
InfoPanel infoPanel2 = new InfoPanel();
infoPanel2.setPreferredSize(new Dimension(320, 320));
infoPanel2.setMinimumSize(new Dimension(320, 320));
infoPanel2.setMaximumSize(new Dimension(320, 320));
infoPanel2.setBackground(Color.RED);
constraints.gridx = 0;
constraints.gridy = 2;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel2, constraints);
InfoPanel infoPanel3 = new InfoPanel();
infoPanel3.setPreferredSize(new Dimension(640, 200));
infoPanel3.setMinimumSize(new Dimension(640, 200));
infoPanel3.setMaximumSize(new Dimension(640, 200));
infoPanel3.setBackground(Color.GREEN);
constraints.gridx = 1;
constraints.gridy = 0;
//constraints.gridwidth = 1;
constraints.gridheight = 1;
gameFrame.add(infoPanel3, constraints);
InfoPanel infoPanel4 = new InfoPanel();
infoPanel4.setPreferredSize(new Dimension(640, 240));
infoPanel4.setMinimumSize(new Dimension(640, 240));
infoPanel4.setMaximumSize(new Dimension(640, 240));
infoPanel4.setBackground(Color.YELLOW);
constraints.gridx = 1;
constraints.gridy = 1;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel4, constraints);
InfoPanel infoPanel5 = new InfoPanel();
infoPanel5.setPreferredSize(new Dimension(640, 200));
infoPanel5.setMinimumSize(new Dimension(640, 200));
infoPanel5.setMaximumSize(new Dimension(640, 200));
infoPanel5.setBackground(Color.PINK);
constraints.gridx = 1;
constraints.gridy = 3;
//constraints.gridwidth = 1;
//constraints.gridheight = 1;
gameFrame.add(infoPanel5, constraints);
gameFrame.pack();
gameFrame.setLocationRelativeTo(null);
Я понимаю, что код не является чистым, это не то, что он будет выглядеть, я просто хотел убедиться, что я могу получить макет мне нужно рабочее первым.
Вот результат:
Поскольку компоновка начинается размещение объектов при -60 пикселей с верхней, есть зазор 60 пикселей в нижней части.
Кто-нибудь сталкивался с чем-то подобным? Меня это озадачивает.
Я надеюсь, что это для тестовых целей, но на всякий случай, [Следует ли мне избегать использования set (Preferred | Maximum | Minimum) Метод размера в Java Swing?] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) – MadProgrammer
@MadProgrammer Спасибо за информацию, я никогда не был уверен, почему это было неодобрительно, но я знал, что это не рекомендуется, и теперь у меня есть объяснение. Но да, причина, по которой я пытаюсь со всеми тремя из-за моего отчаяния :) – Barrex
Я могу заставить это работать, но я не могу объяснить, почему у вас есть дополнительное пространство в конце кадра ... – MadProgrammer