JScrollPane: Как автоматически изменить размер JPanel, содержащейся в свитке - PullRequest
1 голос
/ 07 марта 2011

Я работаю над небольшим апплетом, который имеет список элементов в JScrollPane слева.

пользователь сможет добавлять и удалять элементы из этого списка.

поэтому мне нужно создать прокручиваемый список.

эта часть проста.

Я обычно испытываю желание сделать большую часть изменения размера графического интерфейса вручную, но я прочитал в документе JScrollPane, чтоЛучше позволить Swing обрабатывать это, а не изменять размер вручную.

проблема в том, что я продолжаю добавлять элемент, а внутренняя панель не меняет размер.

есть идеи?

Вот часть кода, который я использую: constructor:

public SideBarView(Dimension d) {

        super(d);
        Dimension d2 = new Dimension(100,300);

        this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        //INSIDE VIEW (zone that is being scrolled)
        container = new SideBarContainer(d2);

//      container.setSize(d2);
//      container.setPreferredSize(d2);
//      container.setMaximumSize(d2);
//      container.setMinimumSize(d2);


        scrollPane = new MyJScrollPane(container);

        new ImageLoaderWorker(this,menuButton).execute();

        Dimension d3 = new Dimension(d.width, d.height-d.width);
        scrollPane.setSize(d3);
        scrollPane.setMaximumSize(d3);
        scrollPane.setMinimumSize(d3);
        scrollPane.setPreferredSize(d3);

        add(scrollPane,BorderLayout.PAGE_START);
        setBorder(BorderFactory.createEmptyBorder());
}

Добавление в контейнер:

element = new JPanel();
        Dimension d2 = new Dimension(100,100);

        element.setSize(d2);
        element.setPreferredSize(d2);
        element.setMaximumSize(d2);
        element.setMinimumSize(d2);

        element.setBackground((panelcount++%2==0)?Color.BLUE:Color.RED);
        cointainer.add(element);

Есть идеи, что мне не хватает?или я должен просто изменить размер контейнера вручную, пока я иду вперед?

Ответы [ 3 ]

4 голосов
/ 07 марта 2011

Вы должны указать контейнеру, чтобы он разложил компоненты. Это делается путем повторной проверки панели:

container.add(element); 
container.revalidate();
2 голосов
/ 07 марта 2011
panel.setSize(d2);
panel.setPreferredSize(d2);
panel.setMaximumSize(d2);
panel.setMinimumSize(d2);

Это не позволяет изменять размер для свинга, поскольку вы указываете менеджеру раскладки использовать точно размер d2 (100/100).

Попробуйте без setMaximumSize и setPreferredSize. Возможно, вам придется отключить панель или полосу прокрутки после добавления / удаления содержимого.

Редактировать:
Я думаю, я считал panel вашим контейнером. Не могли бы вы предоставить код установки для вашей полосы прокрутки и контейнера?

Вы установили менеджер макета для контейнера?

0 голосов
/ 07 марта 2011

Другой возможностью, если вам не нужно делать это самостоятельно, может быть использование некоторого компонента SwingX (например, TaskPane и т. Д.). К сожалению, похоже, что они переходят на java.net, и поэтому многие ресурсы на данный момент недоступны. Тем не менее, есть базовая страница загрузки .

...