【问题标题】:Add images to JPanel one per line将图像添加到 JPanel 每行一张
【发布时间】:2015-12-02 17:07:47
【问题描述】:

我想为 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();
}

但是,这只会在一行中打印图片。

【问题讨论】:

  • 你能合理地缩进你的代码吗?
  • 请参阅编辑以回答示例
  • 你为什么投-1票?
  • 不是我的反对票,但您似乎没有改进代码的格式,即使它被要求。通常希望您只发布格式良好的代码,因为很难理解别人的代码,而且您真的不想让它变得比需要的更难。我们都是这个网站的志愿者。

标签: java swing


【解决方案1】:

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

还有一个例子:

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();
            }
        });
    }
}

【讨论】:

  • @trashgod: 还有另一个例子
【解决方案2】:

看看Java Swing Layout Manager tutorial

您需要适当地配置您的 panel 对象,例如使用 BoxLayout 可能会满足您的需求。

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 2017-09-07
    • 2010-09-22
    • 2013-12-16
    相关资源
    最近更新 更多