2014-12-04 4 views
0

Я играю с 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); 

Я понимаю, что код не является чистым, это не то, что он будет выглядеть, я просто хотел убедиться, что я могу получить макет мне нужно рабочее первым.

Вот результат: GridBagLayout

Поскольку компоновка начинается размещение объектов при -60 пикселей с верхней, есть зазор 60 пикселей в нижней части.

Кто-нибудь сталкивался с чем-то подобным? Меня это озадачивает.

+0

Я надеюсь, что это для тестовых целей, но на всякий случай, [Следует ли мне избегать использования set (Preferred | Maximum | Minimum) Метод размера в Java Swing?] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) – MadProgrammer

+0

@MadProgrammer Спасибо за информацию, я никогда не был уверен, почему это было неодобрительно, но я знал, что это не рекомендуется, и теперь у меня есть объяснение. Но да, причина, по которой я пытаюсь со всеми тремя из-за моего отчаяния :) – Barrex

+0

Я могу заставить это работать, но я не могу объяснить, почему у вас есть дополнительное пространство в конце кадра ... – MadProgrammer

ответ

2

Я думаю, что это один из тех моментов, которые менеджер макета бросил в воздух и сказал: «Ну, это лучшее, что я могу сделать с тем, что вы мне дали».

Если вы меняете constraints.gridheight = 2; на номер constraints.gridheight = 3; за infoPanel2, это сработает.

I «think» Он имеет комбинацию вещей, связанных с общей высотой второго столбца, по сравнению с первой (без учета переплетения строк). Предоставление второй строке для расширения за пределами двух строк, похоже, позволяет ей свернуть лишнее пространство.

Для чего это стоит. Я бы, вероятно, поставил две колонки в отдельные панели и выложил эти две панели, но это только я ...

Смежные вопросы