您好我想制作一个窗口,一个GUI,并在其中放置一个图像。
我观看了一个YT教程(https://www.youtube.com/watch?v=Ap20Qw77TzY)并复制了类似的东西,但我制作的窗口根本没有图像。我尝试了不同的文件类型,如.jpg和不同的窗口大小,匹配图片大小,但它没有帮助。
这是我的代码,我没有真正的错误,除了警告:
The serializable class main does not declare a static final serialVersionUID field of type long,line 8
This method has a constructor,line 25
package main;
import java.awt.Graphics;
import java.awt.Toolkit;
import javax.swing.*;
public class main extends JFrame {
/**
* author jan
*/
public main(String title){
super (title);
}
public void paint(Graphics gr) {
super.paint(gr);
gr.drawImage(Toolkit.getDefaultToolkit().getImage("Koppenhagen\\Pictures\\Herz.png"), 0, 0, this);
}
public static void main(String[] args) {
main window = new main("Mein Test!");
window.setSize(160,160);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}
答案 0 :(得分:3)
ImageIO.read
而不是Toolkit.getImage
,因某种原因无法加载图片的IOException
Koppenhagen\\Pictures
中查找相对于程序执行上下文的文件。您可以使用File#exists
检查文件是否确实存在于您认为的位置paint
方法中加载资源,加载图片需要花费时间,绘画应该尽可能快地运行JFrame
这样的顶级容器的油漆。 JFrame
包含JRootPane
,其中包含contentPane
,其中所有内容均可独立于其父容器绘制。相反,请先使用JPanel
并覆盖其paintComponent
方法,然后将其添加到JFrame
答案 1 :(得分:1)
这是一个绘制图像的简单Swing应用程序。
您必须将图像放在与Java代码相同的目录中。
package com.ggl.testing;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class DrawImage implements Runnable {
@Override
public void run() {
JFrame frame = new JFrame("Image");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane(new ImagePanel(getImage()));
frame.add(scrollPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private Image getImage() {
try {
return ImageIO.read(getClass().getResourceAsStream(
"StockMarket.png"));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new DrawImage());
}
public class ImagePanel extends JPanel {
private static final long serialVersionUID = -2668799915861031723L;
private Image image;
public ImagePanel(Image image) {
this.image = image;
this.setPreferredSize(new Dimension(image.getWidth(null), image
.getHeight(null)));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
}