Java swing - динамическое отображение нескольких изображений на JPanel - PullRequest
0 голосов
/ 14 декабря 2011

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

for(int i=0;i<macthedImages.length;i++) {
    JLabel jLabel = new JLabel(new ImageIcon(macthedImages[i]));
    searchResultPanel.add(jLabel);
}

macthedImages является массивом bufferedImages searchResultPanel - это JPanel

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

1) вы должны установить правильные LayoutManager ,

2) для большого количества изображений в JLabel будет GridLayout лучших вариантов, в случае, если вы хотитечтобы увидеть все изображения на одном JPanel

3) используйте CardLayout , если вы хотите увидеть каждое изображение отдельно

4) возможно, нет необходимости повторного создания

JLabel jLabel = new JLabel(new ImageIcon(macthedImages[i]));

только для установки

jLabel[i].setIcon(macthedImages[i]);

5) возможно, поместите JPanel в JSCrollPane

6), если вы добавляете / удаляете JCOmponents во время выполнения, которое у вас естьпозвонить

revalidate();
repaint()// sometimes required
1 голос
/ 14 декабря 2011

Если вы хотите показать все изображения одновременно, используйте GridLayout, но вы должны учитывать строки и столбцы макета сетки.

GridLayout gl = new gridLayout(2,macthedImages.length/2);

Или, если вы хотите показывать по одному изображению за раз, используйте CardLayout. Как это:

CardLayout cl = new CardLayout();
for(int i=0;i<macthedImages.length;i++){
        JLabel jLabel = new JLabel(new ImageIcon(macthedImages[i]));
        cl.add(jLabel, "jLabel"+i);
    }

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

...