我有两节课。类GUI扩展JFrame
,并且应该在屏幕上显示JPanel
,这是扩展JPanel
的类Surface。
Class Surface有一个paintComponent方法,它应该显示一个图像,但由于某种原因它不会显示它。这是代码:
import javax.swing.*;
public class GUI extends JFrame {
GUI(){
initUI();
}
public void initUI(){
Surface s = new Surface();
add(s);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[]args){
GUI gui = new GUI();
gui.setVisible(true);
}
}
import java.awt.*;
import javax.swing.*;
public class Surface extends JPanel {
Image image;
ImageIcon ii;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
ii = new ImageIcon("redsquare.png");
image = ii.getImage();
Dimension d = new Dimension();
d.width = image.getWidth(null);
d.height = image.getHeight(null);
this.setPreferredSize(d);
g2d.drawImage(image,50,50,null);
}
}
答案 0 :(得分:2)
在您的文件位置看似问题,请尝试从项目资源中获取png的下一个代码:
ii = new ImageIcon(getClass().getResource("redsquare.png"));
与redsquare.png
类相同的包中的示例Surface
文件。
答案 1 :(得分:1)
如果你正在使用像Eclipse或Netbeans这样的IDE,使用这个相对路径“redsquare.png”,你的图像需要直接在项目根目录
ProjectRoot
redsquare.png
src
bin
另外,请听听@mKorbel的明智话语
“永远不要在paintComponent中加载图像(ii = new ImageIcon(”redsquare.png“);),为这个对象创建一个局部变量” - @ mKorbel
另外,对于嵌入式资源,你应该考虑@ alex2410的答案。你想从课堂上加载图像。
答案 2 :(得分:0)
可能是图像位置出现问题 尝试使用不同的图像源
运行