Элемент разворота маятникового потока в прокручиваемом JPanel

Я пытаюсь поместить несколько JPanelкарт в свою основную панель. и если новая панель карты не подходит, я хочу, чтобы она была помещена в следующую строку. На изображении ниже вы видите, что все мои карточные панели идут вправо, и если я устанавливаю HORIZONTAL_SCROLLBAR_ALWAYSгоризонтальные прокрутки. Поэтому здесь я хочу, чтобы в каждой строке моей основной панели была 4 панели карт, чтобы работать вертикальная прокрутка.

public class PanelTraining extends JPanel{
    private static final long serialVersionUID = 1L;


    public PanelTraining(List<FccMeta> ffcms) {
        super(new BorderLayout()); // set layout to absolute
        setPreferredSize(new Dimension(880, 580));
        setBorder(new LineBorder(Color.decode("#A11E1E"),1, true));

        JPanel pnlChart = new JPanel();

        pnlChart.setPreferredSize(new Dimension(860, 180));
        pnlChart.setBackground(Color.YELLOW);
        add(pnlChart, BorderLayout.NORTH);

        JPanel pnlTrSet = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
        //pnlTrSet.setSize(860, 380);

        for (FccMeta fccMeta : ffcms) {
            JPanel pnlCard = new MyCustomPanelCard();
            pnlTrSet.add(pnlCard);
        }


        JScrollPane scroll = new JScrollPane(pnlTrSet);
        //scroll.setPreferredSize(new Dimension(860, 380));
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        add(scroll, BorderLayout.CENTER);

    }
}

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

EDIT в соответствии с приведенным ниже ответом. Я изменил свою реализацию с помощью ScrollablePanel pnlTrSet = new ScrollablePanel ( новый FlowLayout ()); pnlTrSet . setScrollableWidth ( ScrollablePanel . ScrollableSizeHint . FIT ); pnlTrSet . setScrollableBlockIncrement ( ScrollablePanel . VERTICAL , ScrollablePanel . IncrementType . PIXELS , 230 ); Panel.java "rel =" nofollow "> этот класс

Scrollable

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

java,swing,user-interface,awt,layout-manager,

0

Ответов: 1


3 принят

Вам необходимо реализовать Scrollableинтерфейс вашей панели, чтобы ширина была установлена ??на размер окна просмотра прокрутки.

В основном вам нужно переопределить getScrollableTracksViewportWidth()метод, чтобы вернуть «true».

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

Редактировать:

Вышеизложенное предотвратит появление горизонтальной полосы прокрутки. Однако FlowLayout будет продолжать отображать все кнопки в одной строке, потому что предпочтительный расчет размера панели по-прежнему неверен.

Чтобы обернуть кнопки, вы должны заменить FlowLayout вашей панели на Wrap Layout . Wrap LayoutПерерассчитает предпочтительную высоту панели правильно так, чтобы компоненты можно обернуть и вертикальная полоса прокрутки может появиться.

Java, качели, пользовательский интерфейс, AWT, макет-менеджер,