2016-01-16 63 views
-2

我想將一個BufferedImage顯示到JPanel上,但是當我運行程序時它不顯示任何內容。在JPanel上打印BufferedImage

我想這是創建BufferedImage的問題,但是由於對Java的理解有限,我不知道可能會出現什麼問題。我還希望有關的paintComponent方法的一些更多的信息(這是什麼super.paintComponent方法(G)是什麼意思?)

Main.java

public class Main { 
public static void main (String[] args) { 
    Window.windowMake("This is a window"); 
} 
} 

Window.java

import java.awt.image.BufferedImage; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.imageio.ImageIO; 

public class Window extends JFrame { 
public static void windowMake(String title) { 
    JFrame jf = new JFrame(); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setSize(300,300); 
    jf.setVisible(true); 
    jf.setTitle(title); 
    jf.add(new Paint()); 
} 
} 

Paint.java

import java.io.IOException; 
import java.io.File; 
import java.awt.image.BufferedImage; 
import java.awt.Graphics; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.imageio.ImageIO; 

public class Paint extends JPanel { 
BufferedImage sprite = new 
BufferedImage(60,60,BufferedImage.TYPE_INT_ARGB); 

public void createBufImg() { 
    try { 
    sprite = ImageIO.read(new File("/Images/Scene.png")); 
    System.out.println("File read"); 
    } catch (IOException e) { 
    System.out.println("Could not read image"); 
    } 
} 

@Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(sprite,20,20,this); 
} 
} 
+0

代碼甚至沒有編譯行BufferedImage sprite = new;不是一個有效的syntex – Ryan

+0

它正在編譯早些時候...我想我改變了我上次運行代碼和當我複製和粘貼它之間的界限。 –

+0

回到頂部(我不知道這是否適用於本網站) –

回答

0

將一個構造函數添加到類Paint中,該構造函數創建精靈和你的程序會顯示圖像。

public Paint() { 
    super(); 
    createBufImg(); 
} 

此外,你通常不應該調用你的類與Swing中的類或方法相同的名稱,這太容易混淆了。所以不要編寫一個名爲MainPanelWindow的類。

是什麼super.paintComponent方法(G)平均

它調用父類的方法paintComponent,即類要擴展(JPanel在這種情況下)。我建議你在網上查找有關Swing繪畫的內容以獲取更多詳細信息。

+0

謝謝,現在它運行,但它記錄「無法讀取圖像」 –

+0

@CharlieLandrigan可能是因爲圖像文件不在你要找的地方它與'新的文件(「/圖像/ Scene.png」)'。嘗試一個絕對路徑(例如'C:/ Temp/Scene.png')而不是相對路徑。您在代碼中查找圖像的方式是相對於您運行程序的位置的路徑。這必須是準確的文件被發現。 –

+0

我擺脫了第一個「/」,並修復它,非常感謝您的幫助! –