原文:http://zetcode.com/java/displayimage/

在 Java 中显示图像教程介绍了如何在 Java 中显示图像。 我们展示了如何使用命令行工具 Ant,Maven,NetBeans 和 Eclipse 构建项目。 源代码和图像可在作者的 Github 仓库中获得。

初学者程序员经常在项目中显示图像时遇到问题。 问题在于正确识别图像文件的路径。 关键部分是要认识到图像文件的相对路径是从项目目录开始的。 创建本教程的目的是使事情变得清楚。

以下示例显示了该应用的屏幕截图。

用 Java 显示图像 - 图1

图:用 Java 显示图像

源代码

在这里,我们提供了用于在 Java 中显示图像的源代码。

DisplayImage.java

  1. package com.zetcode;
  2. import java.awt.Container;
  3. import java.awt.EventQueue;
  4. import javax.swing.GroupLayout;
  5. import javax.swing.ImageIcon;
  6. import javax.swing.JComponent;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. public class DisplayImage extends JFrame {
  10. public DisplayImage() {
  11. initUI();
  12. }
  13. private void initUI() {
  14. ImageIcon ii = loadImage();
  15. JLabel label = new JLabel(ii);
  16. createLayout(label);
  17. setTitle("Image");
  18. setLocationRelativeTo(null);
  19. setDefaultCloseOperation(EXIT_ON_CLOSE);
  20. }
  21. private ImageIcon loadImage() {
  22. ImageIcon ii = new ImageIcon("simg/snake.jpg");
  23. return ii;
  24. }
  25. private void createLayout(JComponent... arg) {
  26. Container pane = getContentPane();
  27. GroupLayout gl = new GroupLayout(pane);
  28. pane.setLayout(gl);
  29. gl.setAutoCreateContainerGaps(true);
  30. gl.setHorizontalGroup(gl.createSequentialGroup()
  31. .addComponent(arg[0])
  32. );
  33. gl.setVerticalGroup(gl.createParallelGroup()
  34. .addComponent(arg[0])
  35. );
  36. pack();
  37. }
  38. public static void main(String[] args) {
  39. EventQueue.invokeLater(() -> {
  40. DisplayImage ex = new DisplayImage();
  41. ex.setVisible(true);
  42. });
  43. }
  44. }

该示例创建一个 Java Swing 应用,并使用ImageIcon组件显示图像。

  1. private ImageIcon loadImage() {
  2. ImageIcon ii = new ImageIcon("simg/snake.jpg");
  3. return ii;
  4. }

重要的部分在这里。 ImageIcon采用图像的文件路径。 该文件路径取决于我们使用的构建工具。

使用命令行工具显示图像

第一个示例使用命令行工具构建 Java 应用。

  1. $ mkdir bin
  2. $ mkdir -p src/main/com/zetcode/
  3. $ mkdir src/maimg
  4. $ cp ~/Pictures/snake.jpg src/maimg/

我们创建项目结构并将图像复制到images目录。

  1. private ImageIcon loadImage() {
  2. ImageIcon ii = new ImageIcon("src/maimg/snake.jpg");
  3. return ii;
  4. }

在命令行应用中,我们使用了src/maimg/snake.jpg路径。

  1. $ tree
  2. .
  3. ├── bin
  4. └── src
  5. └── main
  6. ├── com
  7. └── zetcode
  8. └── DisplayImage.java
  9. └── images
  10. └── snake.jpg
  11. 6 directories, 2 files

这就是项目目录结构的样子。

  1. $ javac -d bin src/main/com/zetcode/DisplayImage.java

该应用使用javac工具进行编译。

  1. $ tree
  2. .
  3. ├── bin
  4. └── com
  5. └── zetcode
  6. └── DisplayImage.class
  7. └── src
  8. └── main
  9. ├── com
  10. └── zetcode
  11. └── DisplayImage.java
  12. └── images
  13. └── snake.jpg
  14. 8 directories, 3 files

编译源代码后,我们在bin/com/zetcode子目录中创建了一个 Java 类文件。

  1. $ java -cp bin com.zetcode.DisplayImage

我们使用java命令运行该应用。

使用 Ant 构建项目

在本节中,我们将使用 Ant 构建工具来创建项目。

  1. $ mkdir -p src/main/com/zetcode/
  2. $ mkdir src/maimg
  3. $ cp ~/Pictures/snake.jpg src/maimg/

我们创建目录并复制图像文件。

  1. $ tree
  2. .
  3. ├── build.xml
  4. └── src
  5. └── main
  6. ├── com
  7. └── zetcode
  8. └── DisplayImage.java
  9. └── images
  10. └── snake.jpg
  11. 5 directories, 3 files

使用tree命令,显示项目的目录结构。

build.xml

  1. <?xml version="1.0"?>
  2. <project name="DisplayImage" default="compile">
  3. <target name="init">
  4. <mkdir dir="build/classes"/>
  5. </target>
  6. <target name="compile" depends="init">
  7. <javac includeantruntime="false" srcdir="src" destdir="build/classes"/>
  8. </target>
  9. <target name="clean">
  10. <delete dir="build"/>
  11. </target>
  12. </project>

这是 Ant 构建文件。 我们有创建目录,编译源代码和清理的任务。

  1. private ImageIcon loadImage() {
  2. ImageIcon ii = new ImageIcon("src/maimg/snake.jpg");
  3. return ii;
  4. }

我们使用src/maimg/snake.jpg路径。

  1. $ ant
  2. Buildfile: /home/janbodnar/prog/javaimages/displayimageant/build.xml
  3. init:
  4. compile:
  5. [javac] Compiling 1 source file to /home/janbodnar/prog/javaimages/displayimageant/build/classes
  6. BUILD SUCCESSFUL
  7. Total time: 2 seconds

我们建立项目。

  1. $ java -cp build/classes/ com.zetcode.DisplayImage

该应用启动。

在 NetBeans 中显示图像

在 NetBeans 中,我们创建一个 Java 应用。

我们创建一个新文件夹。 我们右键单击“源包”,然后选择“新建—文件夹”。

用 Java 显示图像 - 图2

图:在 NetBeans 中创建一个文件夹

我们将文件夹称为images。 其父目录为src。 使用拖放操作,将snake.jpg文件复制到images子目录。

  1. private ImageIcon loadImage() {
  2. ImageIcon ii = new ImageIcon("simg/snake.jpg");
  3. return ii;
  4. }

在 NetBeans 中,我们使用了simg/snake.jpg路径。

  1. System.out.println(System.getProperty("user.dir"));

该应用的当前工作目录是项目目录,在本例中为DisplayImageEx。 我们可以使用user.dir系统属性找出当前的工作目录。 src目录是项目目录的子目录。

用 Java 显示图像 - 图3

图:项目结构 in NetBeans

该图显示了 NetBeans 中的实际项目结构。

在 Eclipse 中显示图像

在 Eclipse 中,我们创建一个 Java 项目。 我们在项目节点上单击鼠标右键,然后选择“新建—源文件夹”。

我们将文件夹名称称为images。 与 NetBeans 不同,它的父目录是项目文件夹。 使用拖放操作,将snake.jpg文件复制到images子目录。

  1. private ImageIcon loadImage() {
  2. ImageIcon ii = new ImageIcon("images/snake.jpg");
  3. return ii;
  4. }

在 Eclipse 中,我们使用了images/snake.jpg路径。

用 Java 显示图像 - 图4

图:项目结构 in Eclipse

该图显示了 Eclipse 中的实际项目结构。

这是 Java 教程中的图像显示。 我们已经构建了一个 Swing 应用,该应用使用命令行工具,Ant,NetBeans 和 Eclipse 显示图像。 您可能还需要查看ImageIcon教程在 Java 中读写 ICO 文件Java Swing 教程Java 2D 教程, 或 Java 游戏教程