2015-04-22 55 views
0

我想从文件中显示图像(保存在我的计算机上)我试图加载的图像称为“maze.jpg”。从我到目前为止的代码,它能够运行和编译,但每当我运行它时,我都会得到一个空白窗口。我究竟做错了什么??我正在使用NetBeans来编写代码。这里是我的代码:从计算机显示图像

package mazedisplay; 

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import java.io.*; 
import java.util.Scanner; 
import javax.imageio.*; 
import javax.swing.*; 

public class MazeDisplay extends Component 
{ 
    BufferedImage b; 

    public void paint(Graphics g) 
    { 
     g.drawImage(b,0,0,null);//supposed to draw an image at these coordinates 
    } 

    public MazeDisplay() 
    { 
     try 
     { 
     b = ImageIO.read(new File("C:\\Users\\Owner\\Documents\\NetBeansProjects\\MazeDisplay\\maze.jpg""));//reads the file 

     } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 

     } 


    } 

    public Dimension getPreferredSize() 
    { 
     if (b == null) 
     { 
     return new Dimension(800,800); 
     } 
     else 
     { 
      return new Dimension(b.getWidth(null), b.getHeight(null)); 
     } 
    } 

    private static String[][] readMaze(String filepath) 
    { 
     try 
     { 
      Scanner scan = new Scanner(new File(filepath)); 

     } 

     catch(Exception e) 
     { 

     } 
     return null; 
    } 


    public static void main(String[] args) 
    { 
     String[][] maze = readMaze("C:\Users\Owner\Documents\NetBeansProjects\MazeDisplay\maze.jpg"); 
     JFrame f = new JFrame("Maze");//sets the frame to say "maze" 
     System.out.println(new File("maze.jpg").getAbsolutePath()); 

     f.addWindowListener(new WindowAdapter() 
     { 
       public void windowClosing(WindowEvent e)//this is for closing the program 
       { 
        System.exit(0); 
       } 
      }); 

     Component add = f.add(new MazeDisplay()); 
     f.pack(); 
     f.setVisible(true);// makes sure we can see it 

     JPanel displayPanel = new JPanel(); 
     JPanel content = new JPanel(); 

    } 
} 
+0

好吧,我假设我必须给出这样的路径: (“C:\\ Users \\ Owner \\ Desktop \\ maze.jpg”)? – Amma

+1

取决于图像的位置。如果它在项目文件夹中,也可以使用相对路径。在try-catch-block中添加'e.printStackTrace()'以加载图像以查看是否引发异常 – Paul

+0

好吧!但e.printStackTrace()做什么?另外,我在那里添加了它,显然我得到的是: 运行: javax.imageio.IIOException:无法读取输入文件! (imageIO.java:1301) \t at mazedisplay.MazeDisplay。 (MazeDisplay.java:23) \t在mazedisplay.MazeDisplay.main(MazeDisplay.java:58) 生成成功(总时间:1秒) – Amma

回答

0
JComponent display = new JComponent() { 
    BufferedImage bi = loadImg(); 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(bi, 0, 0, this); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(bi.getWidth(), bi.getHeight()); 
    } 
}; 

JFrame frame = new JFrame("Maze"); 
frame.setContentPane(display); 
frame.pack(); 
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
frame.setVisible(true); 

private static BufferedImage loadImg(){ 
    BufferedImage bi = null; 
    try{ 
     bi = ImageIO.read(new File("yourfile.jpg")); 
    }catch(IOException e){ 
     e.printStackTrace(); 

     bi = new BufferedImage(200 , 100 , BufferedImage.TYPE_INT_RGB); 
     Graphics g = bi.getGraphics(); 
     g.setColor(Color.white); 
     g.fillRect(0 , 0 , 200 , 100); 
     g.setColor(Color.black); 
     g.drawString(e.getMessage() , 20 , 20); 
    } 

    return bi; 
} 

,这样就会将显示加载的图像,或者从加载图像,如果有异常被抛出errormessage的另一幅图像。

+0

我能够得到它的工作! =)非常感谢你帮助我!对于所有这些评论感谢抱歉XD,但是这个代码是做什么的: Graphics g = bi.getGraphics(); g.setColor(Color.white); g.fillRect(0,0,200,100); g.setColor(Color.black); g.drawString(e。getMessage(),20,20); } – Amma

+0

它创建一个带有白色背景的新图像和黑色的错误消息。每个图像都有它自己的图形对象,可以用来绘制它。 – Paul