Java - 如何获取要显示的图像?
Java - How do I get an image to display?
我花了很长时间试图找到一种在 Java 程序中显示图像的方法(我正在尝试学习如何制作 2D Java 游戏)一无所获我试过的作品。我正在使用 Eclipse Mars 和其他最新版本。这是我的代码:
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
public static void main(String[] args0) {
JFrame frame = new JFrame();
ImageIcon image = new ImageIcon("background.bmp");
JLabel imageLabel = new JLabel(image);
frame.add(imageLabel);
frame.setLayout(null);
imageLabel.setLocation(0, 0);
imageLabel.setSize(1000, 750);
imageLabel.setVisible(true);
frame.setVisible(true);
frame.setSize(1000, 750);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
请告诉我如何更正代码以使图像实际显示。提前谢谢你。
(P.S。"background.bmp" 文件在 "default package" 中,如果有任何变化的话)
阅读 How to Use Icons 上的 Swing 教程部分。它们的示例向您展示了如何将图像作为资源加载。当您使用资源时,将搜索类路径以查找文件。
//frame.setLayout(null);
//imageLabel.setLocation(0, 0);
//imageLabel.setSize(1000, 750);
不要使用空布局并尝试设置标签的 size/location。让布局管理器完成它的工作。标签将是图像的大小。
//frame.setSize(1000, 750);
frame.pack();
不要使用 frame.setSize(...)。相反,您使用 frame.pack()
那么框架将是图像的大小加上框架边框和标题的大小。让 Swing 及其布局管理器为您完成这项工作。
后缀为.bmp 的图片无法在您的代码中显示。尝试修改
ImageIcon image = new ImageIcon("background.bmp");
至
ImageIcon image = new ImageIcon("background.png");
并将图像名称更改为 background.png。
但是,如果你只是想使用background.bmp,你需要像这样修改你的代码,背景图片才会显示。
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
public static void main(String[] args0) {
try {
JFrame frame = new JFrame();
File imageFile = new File("background.bmp");
Image i = ImageIO.read(imageFile);
ImageIcon image = new ImageIcon(i);
JLabel imageLabel = new JLabel(image);
frame.add(imageLabel);
frame.setLayout(null);
imageLabel.setLocation(0, 0);
imageLabel.setSize(1000, 750);
imageLabel.setVisible(true);
frame.setVisible(true);
frame.setSize(1000, 750);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
新代码的效果如下:
希望对您有所帮助。
顺便说一句,我把图片放在了项目的根目录下。
作为一个初学者,我发现你画的图很容易看出来:
源代码
public class CheckCodeTest {
private int width = 100, height = 50;
private BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
@Test
public void drawGraphicsTest() throws IOException {
Graphics graphics = image.createGraphics();
// draw an orange rectangle
graphics.setColor(Color.orange);
graphics.fillRect(0,0,width,height);
// layout the picture right now!
graphics.drawImage(image,0,0,null);
ImageIO.write(image, "png", new File("checkcode.png"));
}
}
输出
它会在您的项目内容下生成一个图片文件。
output-picture
然后就可以看到小window中添加draw代码后有什么变化了,比关闭一个跳出的Frame/Label方便多了window:
output-picture-in-editor
我花了很长时间试图找到一种在 Java 程序中显示图像的方法(我正在尝试学习如何制作 2D Java 游戏)一无所获我试过的作品。我正在使用 Eclipse Mars 和其他最新版本。这是我的代码:
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
public static void main(String[] args0) {
JFrame frame = new JFrame();
ImageIcon image = new ImageIcon("background.bmp");
JLabel imageLabel = new JLabel(image);
frame.add(imageLabel);
frame.setLayout(null);
imageLabel.setLocation(0, 0);
imageLabel.setSize(1000, 750);
imageLabel.setVisible(true);
frame.setVisible(true);
frame.setSize(1000, 750);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
请告诉我如何更正代码以使图像实际显示。提前谢谢你。
(P.S。"background.bmp" 文件在 "default package" 中,如果有任何变化的话)
阅读 How to Use Icons 上的 Swing 教程部分。它们的示例向您展示了如何将图像作为资源加载。当您使用资源时,将搜索类路径以查找文件。
//frame.setLayout(null);
//imageLabel.setLocation(0, 0);
//imageLabel.setSize(1000, 750);
不要使用空布局并尝试设置标签的 size/location。让布局管理器完成它的工作。标签将是图像的大小。
//frame.setSize(1000, 750);
frame.pack();
不要使用 frame.setSize(...)。相反,您使用 frame.pack()
那么框架将是图像的大小加上框架边框和标题的大小。让 Swing 及其布局管理器为您完成这项工作。
后缀为.bmp 的图片无法在您的代码中显示。尝试修改
ImageIcon image = new ImageIcon("background.bmp");
至
ImageIcon image = new ImageIcon("background.png");
并将图像名称更改为 background.png。
但是,如果你只是想使用background.bmp,你需要像这样修改你的代码,背景图片才会显示。
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
public static void main(String[] args0) {
try {
JFrame frame = new JFrame();
File imageFile = new File("background.bmp");
Image i = ImageIO.read(imageFile);
ImageIcon image = new ImageIcon(i);
JLabel imageLabel = new JLabel(image);
frame.add(imageLabel);
frame.setLayout(null);
imageLabel.setLocation(0, 0);
imageLabel.setSize(1000, 750);
imageLabel.setVisible(true);
frame.setVisible(true);
frame.setSize(1000, 750);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
新代码的效果如下:
希望对您有所帮助。
顺便说一句,我把图片放在了项目的根目录下。
作为一个初学者,我发现你画的图很容易看出来:
源代码
public class CheckCodeTest {
private int width = 100, height = 50;
private BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
@Test
public void drawGraphicsTest() throws IOException {
Graphics graphics = image.createGraphics();
// draw an orange rectangle
graphics.setColor(Color.orange);
graphics.fillRect(0,0,width,height);
// layout the picture right now!
graphics.drawImage(image,0,0,null);
ImageIO.write(image, "png", new File("checkcode.png"));
}
}
输出
它会在您的项目内容下生成一个图片文件。
output-picture
然后就可以看到小window中添加draw代码后有什么变化了,比关闭一个跳出的Frame/Label方便多了window:
output-picture-in-editor