JPanel макет Проблема - PullRequest
0 голосов
/ 03 мая 2011

Так что у меня небольшая проблема с добавлением двух JPanels на главную главную панель.Я привел это как быстрый пример того, что я хочу сделать, так как вы не хотите просматривать множество строк ненужного кода :).Я хочу, чтобы сначала была добавлена ​​панель 1 ( север ), а затем панель 2 ( юг ).Я попытался использовать макет Border и расположить их, вызывая север и юг на BorderLayout при добавлении панелей, но все же не повезло.

Заранее спасибо.

private JPanel one,two;

public Example(){
    one = new JPanel();
    one.setSize(new Dimension(400,400));
    two = new JPanel(new GridLayout(7,8));
    two.setSize(new Dimension(400,400));
    one.setBackground(Color.BLACK);
    two.setBackground(Color.BLUE);
    JPanel mainpanel = new JPanel();
    mainpanel.setBackground(Color.orange);
    mainpanel.add(one);
    mainpanel.add(two);
    add(mainpanel);
    setSize(500,500);
    setVisible(true);
}

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Попробуйте этот код.Возникла проблема, заключающаяся в том, что если вы установите сетку на панели и не добавите ни одного компонента, она не займет места.

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example extends JFrame
{
    private JPanel one, two;

    public Example()
    {
        one = new JPanel();
        two = new JPanel();///new GridLayout(7, 8));
        one.setBackground(Color.BLACK);
        two.setBackground(Color.BLUE);
        JPanel mainpanel = new JPanel(new BorderLayout());
        mainpanel.setBackground(Color.orange);
        mainpanel.add(one, BorderLayout.NORTH);
        mainpanel.add(two, BorderLayout.SOUTH);
        setContentPane(mainpanel);
        setSize(500, 500);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                Example f = new Example();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
            }
        });
    }
}
1 голос
/ 03 мая 2011

Если вы хотите использовать BorderLayout, то BorderLayout.CENTER занимает столько места, сколько может, а остальные направления занимают только то, что им нужно. Если вы добавите дополнительные элементы в JPanels, они будут увеличиваться в зависимости от потребностей содержащихся в них объектов.

Если вы хотите просто равномерно разделить пространство внутри главной JPanel, попробуйте следующее:

JPanel mainpanel = new JPanel(new GridLayout(2, 1));

Это создает GridLayout с 2 строками и 1 столбцом ...

0 голосов
/ 03 мая 2011

GridLayout игнорирует значения, установленные в методе setSize содержащихся компонентов. Если вы хотите контролировать размер каждого компонента, рассмотрите возможность использования GridBagLayout .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...