试图用Java在屏幕上显示图像是行不通的

时间:2013-12-23 07:28:00

标签: java image swing embedded-resource imageicon

我有两节课。类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); 

    } 

} 

3 个答案:

答案 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)

可能是图像位置出现问题 尝试使用不同的图像源

运行