FlowLayout не собирается на новую линию - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь добавить переменное количество JPanels (каждый из которых содержит 2 метки) внутри другой JPanel, используя FlowLayout.Когда добавляется слишком много панелей вместо перехода в новую строку, они исчезают за границей

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

public class AlbumView extends javax.swing.JFrame
{
    private Album A;

    public AlbumView()
    {
        initComponents();
        A = new Album();

        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int w = this.getSize().width;
        int h = this.getSize().height;
        int x = (dim.width-w)/2;
        int y = (dim.height-h)/2;
        this.setLocation(x, y);

        pnlCategorie.setLayout(new FlowLayout(FlowLayout.TRAILING, 10, 10));

        /*
        Insert of many elements in the Album
        */

        aggiornaAlbum();
    }

    public void aggiornaAlbum()
    {
        for(int i = 0; i < A.getDim(); i++)
        {
            Categoria c = A.getCategoria(i);

            JPanel pnl = new JPanel();
            pnl.setName(c.getNome());
            JLabel lb1, lb2;
            ImageIcon img = new ImageIcon(c.getPhoto(0).getImg(95, 95));  //da cambiare lo 0 con un numero casuale tra le foto disponibili
            lb1 = new JLabel(img, JLabel.CENTER);
            lb2 = new JLabel(c.getNome(), JLabel.CENTER);


            pnl.setLayout(new BoxLayout(pnl, BoxLayout.Y_AXIS));

            pnl.setBorder(BorderFactory.createLineBorder(Color.black));
            pnl.add(lb1);
            pnl.add(lb2);
            //pnl.revalidate();
            //pnl.repaint();

            pnlCategorie.add(pnl);
        }

        //ADDED AFTER COMMENT, NOTHING CHANGED (but probably it's because i didn't get exaclty what to do
        pnlCategorie.revalidate();
        pnlCategorie.repaint();
    }

pnlCategorie создается с использованием свинга NetBeans.

Я ожидаю, что после числа jpanels, которое соответствует большей jPanel, следующая переходит на новую строку

Пример того, что появляется (яиспользуя примерное изображение, не судите): Example

...