如何在 Java 应用程序中显示图像

Posted

技术标签:

【中文标题】如何在 Java 应用程序中显示图像【英文标题】:How to display an image in a Java application 【发布时间】:2011-02-25 23:39:36 【问题描述】:

我想在我的 Java 应用程序中显示图像。我找到了从网络服务器下载图像并将其显示在 jframe 中的代码。

我想使用标签来显示图像或其他内容。它不应该是 JFrame。

这是我的代码:

Image image = null;
try 
    URL url = new URL(
        "http://www.personal.psu.edu/acr117/blogs/audrey/images/image-2.jpg");
    image = ImageIO.read(url);
 catch (IOException e) 


// Use a label to display the image
JFrame frame = new JFrame();

JLabel lblimage = new JLabel(new ImageIcon(image));
frame.getContentPane().add(lblimage, BorderLayout.CENTER);
frame.setSize(300, 400);
frame.setVisible(true);

有人可以帮我吗?

【问题讨论】:

您的代码是否有效?你试过了吗?如果它不起作用,那么出了什么问题 - 您是否收到错误消息,或者它看起来不像您期望的那样?您提供的详细信息越多,人们就能为您提供更好的帮助。 代码完全符合您的描述。图像显示在标签 lblimage 中。您可以将标签放在 JPane 中,它会起作用。你认为什么不起作用? 没有它的工作正常。但它显示在框架中。但我希望这张图片显示在标签或其他东西中。所以我可以调整大小和所有。我想将此图像放在我的应用程序的特定区域。请帮帮我 标签是框架中唯一的东西,所以它占据了整个框架。向 GUI 添加更多内容后,它看起来会很好。 我尝试添加越来越多的标签。我只是拖放它们。但只有图像显示..其他没有显示 【参考方案1】:

使用您提供的代码,您已经在名为lblimageJLabel 中拥有图像。您现在可以将其添加到面板或任何其他容器对象,如下所示:

JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(lblimage);
// add more components here
frame.add(mainPanel);
frame.setVisible(true);

您可以像对待任何普通组件一样对待该标签 (lblimage)。

【讨论】:

我尝试拖放一个面板并使此代码适应它。但不工作。我想在我的 GUI 中添加越来越多的项目(按钮和标签)。你能帮帮我吗【参考方案2】:

您可以尝试这样做:

import javax.swing.ImageIcon;
...
JLabel image = new JLabel(new ImageIcon("imageName.png"));
...
frame.add(image);

我发现这样做更容易:D

编辑:第四次阅读该问题后,我意识到这正是您在问题中所做的。现在,我很难弄清楚你到底想要什么。

【讨论】:

我的问题是这个。我已经在我的标签中添加了一张图片。但它没有显示。标签来自拖放。所以我想当我的应用程序运行时标签应该显示图像。另一件事是它不应该占用整个 GUI。使用 jframe 它的作用是占用整个框架,所以我什至无法添加任何其他按钮或标签 不应该占用整个 GUI 是什么意思?通过拖放,你的意思是你正在使用另一个程序来制作 GUI?如果图像没有显示,您可能需要做的是将包含图像的 JLabel 放入 JPanel,然后告诉 JPanel 执行 updateUI(); (我想。我仍然不确定你的问题是什么。) 我有更多的按钮和标签。所有这些都不是由代码创建的。我已将它们拖放到表单中。 这就是令人困惑的地方;您使用什么程序将它们拖放到表单中?你所说的形式是什么意思?您是否正在构建一个拖放组件的程序?【参考方案3】:

我会在其他有用的答案中添加两个注释:

1) 不要吞下异常;写入日志或至少打印堆栈跟踪。

catch (IOException e)  e.printStackTrace(); 

2) 不要写frame.setSize(300, 400),而是使用pack(),这会“导致此Window 的大小适合其子组件的首选大小和布局。”这样,将使用图片的原始尺寸。这也是@camickr 建议阅读布局管理器的基础。

【讨论】:

【参考方案4】:

您的代码已经完成了您需要的工作(在 JFrame 以外的地方显示它 - 那是 JLabel - )

对于您在 cmets 中所说的,尝试拖放并添加更多组件我认为您需要使用 GUI BUilder 来实现您想要的(不仅显示图像,而且添加其他组件)

我建议你使用IntelliJ IDEA的GUI Builder

为了全面了解 Swing 的工作原理以及您可以使用它,您还可以查看:The swing tutorial

【讨论】:

【参考方案5】:

我想添加越来越多的项目 (按钮和标签)到我的 GUI。能够 请帮帮我

您的问题与标签和图片无关。您需要了解如何使用布局管理器来组织您添加到框架的组件。

因此,首先阅读Layout Managers 上的 Swing 教程。您可以下载和使用大量示例。您还可以在不同的面板上嵌套不同的布局管理器。

【讨论】:

【参考方案6】:

试试这个:

JLabel lblNewLabel_1 = new JLabel("");
lblNewLabel_1.setIcon(new ImageIcon(MainMenu.class.getResource("/Images/Bugs.png")));

【讨论】:

以上是关于如何在 Java 应用程序中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

用于从网站下载图像并显示文件大小的 Java 程序

在 Java 中显示图像

我将如何从AMD GPU的显示输出中获取图像数据? [处于保留状态]

从 Java 中的 COM7 端口读取图像数据

对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上

如何在颤动中显示所有图像格式?