избегать перекрытия boxlayout

Вот и я снова... сражаюсь с качелями!!! Итак, я создаю онлайн-тест, который будет отображаться в апплете. Количество вопросов в тестах не фиксировано, поэтому мне нужно задавать вопросы согласно тесту. Чтобы отобразить вопросы, я создал панель вопросов jpanel, которую затем добавил в панель контейнера, которая будет отображаться в апплете. Для панели контейнера я использую boxlayout, который позволяет мне размещать вопросы один поверх другого.

Моя проблема в том, что после добавления более 5 вопросов на панель контейнера вопросы начинают перекрываться. Так может ли кто-нибудь направить меня?

Во-первых, как я могу избежать перекрытия? Во-вторых, имеет ли jpanel фиксированный максимальный размер? Или есть способ сделать его достаточно большим, чтобы поместить все тестовые вопросы в контейнер панели? Я думал о встраивании панели в jscrollpane или я не знаю, будет ли после того, как панель контейнера встроена в апплет, она будет прокручиваться вниз, когда я прокручиваю браузер вниз... Спасибо, ребята, за любую помощь

Вот фото того, как это выглядит, когда вопросов не так много...

введите здесь описание изображения

Вот код...

 public class Test extends JPanel {

    public Test() {
        setLayout(null);            
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(0, 5, 712, 1200);
        add(scrollPane);

        JPanel panel = new JPanel();
        scrollPane.setViewportView(panel);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        MultipleChoice q1 = new MultipleChoice();
        panel.add(q1);
        MultipleChoice q2 = new MultipleChoice();
        panel.add(q2);
        MultipleChoice q3 = new MultipleChoice();
        panel.add(q3);
        MultipleChoice q4 = new MultipleChoice();
        panel.add(q4);
        MultipleChoice q5 = new MultipleChoice();
        panel.add(q5);    
    }    
}

person JLA    schedule 13.07.2013    source источник
comment
Номер один: не делайте setLayout(null);. Просто не надо. Каждый раз это будет вас одолевать. Номер два: если вам нужна наша помощь, действительно нужна помощь, приложите усилия, чтобы опубликовать sscce. Иначе вы заставляете нас гадать, а это нехорошо.   -  person Hovercraft Full Of Eels    schedule 13.07.2013
comment
не знаю, как сделать это sscce, так как я даже не уверен, как правильно это исправить   -  person JLA    schedule 13.07.2013
comment
Если мы не сможем воспроизвести вашу ошибку, я сомневаюсь, что мы сможем полностью понять вашу ошибку. Ваш вопрос JPanels использует нулевой макет?   -  person Hovercraft Full Of Eels    schedule 13.07.2013
comment
Я знаю, приятель... Но как я могу быть более точным, если я мало что знаю о свингах? Я использую Windowbuilder, и это макет, указанный при установке абсолютного макета контейнера.   -  person JLA    schedule 13.07.2013
comment
вы можете принять предыдущий вопрос, если не возражаете xD .com/questions/17621185/   -  person nachokk    schedule 13.07.2013
comment
ооо ... это в основном вопрос типа "дай мне кодз, потому что я-дон-хав-де-время"? -1 учись или погибни   -  person kleopatra    schedule 13.07.2013


Ответы (1)


Я предполагаю, и все, что я могу сделать, это предположить без sscce, но если ваша панель MultipleChoice JPanel использует нулевой макет, тогда не сможет дать приличный предпочтительный размер вашим менеджерам компоновки, допускающим перекрывающиеся компоненты. Если это так, снова решение состоит в том, чтобы не использовать нулевой макет, почти никогда.

Вы указываете в комментарии:

Я знаю, приятель... Но как я могу быть более точным, если я мало что знаю о свингах? Я использую Windowbuilder, и это макет, указанный при установке абсолютного макета контейнера.

  • "приятель"?
  • относительно «когда я мало знаю о свинге»: тогда узнайте о свинге. Перейдите к учебным пособиям по диспетчеру макетов и ознакомьтесь с менеджерами макетов. .
  • относительно: «Я использую Windowbuilder, и это макет, указанный при установке макета контейнера в абсолютное значение»: часть вашей проблемы, как вы сами признаете, заключается в том, что вы еще не полностью понимаете Swing и, в частности, использование его макета менеджеров, и одна из причин этой проблемы заключается в том, что вы используете инструмент, который избавляет вас от необходимости понимать это. Я призываю вас не использовать WindowBuilder. Снова прочитайте о менеджерах компоновки и узнайте, как их использовать. Вы не пожалеете, что сделали это.
person Hovercraft Full Of Eels    schedule 13.07.2013
comment
Поверьте мне, я очень хочу узнать об этом все... но у меня большие временные ограничения, так как это проект для ЛЕТНЕГО курса (целый семестр втиснут в пару недель), поэтому у меня действительно нет времени получить полное представление о каждом аспекте Swings; но я понимаю твою мысль... приятель - я думаю, что это используется, когда ты пытаешься быть дружелюбным. Спасибо на воздушной подушке - person JLA; 13.07.2013
comment
@ user2108393: Вам нужно будет изучить некоторые важные концепции Swing, если вы собираетесь успешно кодировать свой проект. Я бы предположил, что макеты имеют решающее значение и, следовательно, должны быть в коротком списке тем, которые вы планируете изучать в ближайшее время (например, начать сегодня вечером). В противном случае у вас не будет достаточно знаний, чтобы опубликовать вопрос, на который можно ответить, как вы понимаете. - person Hovercraft Full Of Eels; 13.07.2013
comment
@ user2108393 сегодня в пятницу вечером? можно подождать завтра, но то, что говорят на воздушной подушке, верно, менеджеры компоновки необходимы, и они НЕ слишком сложны, код станет проще, потому что вы делегируете обязанности менеджерам компоновки. если вы удалите строку setLayout(null), вы увидите, что это будет лучше, в windowsBuilder наверняка есть возможность установить setLayout - person nachokk; 13.07.2013
comment
@nachokk: Он просит нас помочь ему с кодом в пятницу вечером, так что не так уж сложно попросить его поучиться в пятницу вечером, верно? - person Hovercraft Full Of Eels; 13.07.2013