每行添加一张JPanel图像

时间:2015-12-02 17:07:47

标签: java swing

我想为JScrollPane中的每一行添加一个图像,里面有JPanel。这是我的方法:

for(int i=0;i<arrayWithPaths.size();i++){
BufferedImage newPic;
try {
newPic = ImageIO.read(new File("path");
JLabel picLabel = new JLabel(new ImageIcon(newPic));
panel.add(picLabel);
JLabel space = new JLabel("\n");
panel.add(space);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

然而,这只会在一行中打印图片。

2 个答案:

答案 0 :(得分:2)

完全不同的方法 - 使用JScrollPane中显示的JList,并将ImageIcons添加到JList的模型中。 JList将知道如何处理ImageIcons并将显示您的图像。如果需要,它们甚至可以选择。

这是另一个例子:

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

@SuppressWarnings("serial")
public class ImageList extends JPanel {
    private static final String BASE_PATH = "http://file.kelleybluebookimages.com/"
            + "kbb/images/content/editorial/";
    private static final String[] PATHS = {
        "2015-acura-tlx-guide-180.jpg",
        "13A420TFSI_01_hrgb-180.jpg",
        "CT_071713_BMW320i_0439-180.jpg",
        "2013-Cadillac-ATS-137-180.jpg",
        "EJ2V1342-180.jpg",
        "2014LexusIS005-180.jpg",
        "2014-volvo-s60-180.jpg",
        "2015-jeep-renegade-profile-180.jpg"
    };
    private DefaultListModel<Icon> listModel = new DefaultListModel<>();
    private JList<Icon> imageJList = new JList<>(listModel);

    public ImageList() throws IOException {
        for (String path : PATHS) {
            String imgPath = BASE_PATH + path;
            URL url = new URL(imgPath);
            BufferedImage img = ImageIO.read(url);
            listModel.addElement(new ImageIcon(img));
        }

        imageJList.setVisibleRowCount(4);
        JScrollPane scrollPane = new JScrollPane(imageJList);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        add(scrollPane);
    }    

    private static void createAndShowGui() {
        JFrame frame = new JFrame("ImageList");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        try {
            frame.getContentPane().add(new ImageList());
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

答案 1 :(得分:1)

查看Java Swing Layout Manager tutorial

您需要相应地配置panel对象,例如BoxLayout可能会为您提供所需内容。