我已经用谷歌搜索了这个并搜索了这个网站,尝试使用 Swing 来显示图像,但是每次我实现在网上找到的代码时它都不起作用。我不知道我做错了什么,有人可以帮助我吗?
package Game;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Amazing {
private int width = 300;
private int height = width / 16 * 9;
private int scale = 3;
private static Graphics g;
private static JFrame frame = new JFrame();
private static JPanel panel = new JPanel();
public Amazing(){
Dimension size = new Dimension(width*scale, height*scale);
frame.setPreferredSize(size);
frame.setResizable(false);
frame.setTitle("Amazing!");
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args){
Amazing amazing = new Amazing();
Character character = new Character();
character.paintComponent(g);
}
}
<小时/>
package Game;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Character extends JPanel{
private BufferedImage image;
public Character(){
try {
image = ImageIO.read(new File("E:\\Libraries\\Documents\\Java Stuff\\workspace\\Java_Final\\narwhal.png"));
} catch (IOException ex) {
// handle exception...
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 50, 50, null); // see javadoc for more info on the parameters
}
}
最佳答案
Amazing amazing = new Amazing();
这行代码所做的就是创建一个框架,然后向其中添加一个空面板。由于面板是空的,所以没有什么可绘制的。
Character character = new Character();
character.paintComponent(g);
您永远不应该直接调用paintComponent()方法。当组件需要重新绘制时,Swing 将调用该方法。不管怎样,创建一个Character对象什么也不做。那个物体只是存在于内存中。它没有添加到 GUI,因此永远无法绘制。
我建议您忘记自定义绘画,只使用 JLabel 来显示图像。阅读 Swing 教程中关于 How to Use Labels 的部分一个工作示例。不仅如此,本教程还将向您展示如何更好地构建代码。您不应该使用静态变量。从工作示例开始,然后对其进行自定义以使用您的图像。
关于java - 我无法使用 Swing 弹出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587894/