Как визуализировать отсутствующие внутренние панели? - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь сформировать следующий фрейм:

Основной фрейм использует BorderLayout.

В этот фрейм и я добавил панель, которая использует BoxLayout - я назову его P1.

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

Что еще более запутанно, так это то, что если P1 использует GridLayout вместо BoxLayout, отображаются все панели, которые я добавил в P1.

Класс EventPanel, используемый в коде, расширяет Panel и использует SpringLayout.

Есть идеи, как заставить работать P1?

Вот соответствующий код:

    public static void main(String[] args) 
{
        //Setting Frame
        JFrame m_CalendarFrame = new JFrame();
        m_CalendarFrame.getContentPane().setLayout(new BorderLayout());

        //Setting inner Panel
        JPanel P1 = new JPanel();
        P1.setLayout(new BoxLayout(P1, BoxLayout.Y_AXIS));


        EventPanel Ev = new EventPanel("8:00", "16:00", "Bday", "Go party!");
        EventPanel Ev2 = new EventPanel("8:00", "16:00", "Java", "Handing Java Project");

        //Adding Two pannels into previous inner Panel
        P1.add(Ev);
        P1.add(Ev2);

        m_CalendarFrame.getContentPane().add(P1, BorderLayout.NORTH);

        m_CalendarFrame.setVisible(true);

        m_CalendarFrame.setSize(800,800);


}

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Полагаю, проблема в вашей панели, которая использует SpringLayout. Начните с чтения учебного пособия по Swing по Как использовать SpringLayout для рабочих примеров и объяснений.

Если вам по-прежнему нужна помощь, опубликуйте SSCCE , который демонстрирует вашу проблему. И начать просто. Попробуйте использовать SpringLayout с одним компонентом, затем двумя, тремя, пока не почувствуете себя более комфортно с ним.

0 голосов
/ 20 октября 2011

Я считаю, что это связано с управлением свободным пространством, но я не проверял это сам. BoxLayout использует предпочтительный размер для компонентов, которые он рисует, а GridLayout равномерно распределяет доступное пространство между нарисованными объектами.

Что произойдет, если вы укажете предпочтительный размер для EventPanel? Основываясь на своем примере кода, вы можете быстро проверить это, установив предпочтительный размер (800 400) для ваших экземпляров EventPanel и посмотреть, не изменится ли он при использовании BoxLayout.

.
...