[英]Displaying JPEG image using paintComponent() method in Java
我是編碼新手,無法使用paintComponent()顯示JPEG。 Java中JFrame的方法。 我的代碼如下所示:
import java.awt.*;
import javax.swing.*;
class SimpleGuiMe {
MyDrawPanel imageex;
public static void main (String [] args){
SimpleGuiMe gui = new SimpleGuiMe();
gui.go();
}
public void go() {
JFrame frame = new JFrame();
imageex = new MyDrawPanel();
frame.getContentPane().add(imageex);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
Image image = new ImageIcon("WOW(1).jpg").getImage();
g.drawImage(image,3,4,this);
}
}
}
我不確定是否需要將要顯示的JPEG文件保存在某個目錄中才能使用它。
另外,我正在使用有些過時的教科書來獲取此處顯示的代碼。 它是Java 5.0之后的版本,但僅在2005年發布。
任何幫助將不勝感激!
您的Panel類應如下所示
class MyDrawPanel extends JPanel {
private Image image;
public MyDrawPanel() {
image = new ImageIcon("C:/..path to file../marilyn monroe.jpg").getImage();
}
public void paintComponent(Graphics g) {
g.drawImage(image,3,4,this);
}
}
ImageIcon正在Sun的awt API內部使用FileInputStream,該API可以采用文件的絕對或相對路徑。 如果使用絕對路徑,則無需擔心,它將每次都正常運行。
如果要使用相對路徑,則必須找出哪個目錄是調用代碼的java進程的當前目錄。
假設我們調用以下命令
C:/users/meuser>java SimpleGuiMe
然后,java進程的當前目錄為C:/users/meuser
如果將圖像放在C:/users/meuser
或此目錄的子目錄中,則可以通過如下相對路徑訪問它。
//directly inside C:/users/meuser
image = new ImageIcon("marilyn monroe.jpg").getImage();
要么
//in a sub directory like Downloads
image = new ImageIcon("Downloads/marilyn monroe.jpg").getImage();
可以使用javax.imageio.ImageIO
代替使用ImageIcon來讀取圖像,如下所示。
image = ImageIO.read(new File("path to file/filename.jpg"));
ImageIO和ImageIcon之間的區別在於,ImageIcon具有支持圖像位置的URL參數的構造函數,而ImageIO從File或InputStream讀取圖像。
在這種情況下,相對路徑和絕對路徑的概念也保持不變。
注意:每當更新UI時(如調整窗口大小或繪制/重繪任何新元素),都會調用paintComponent方法。 圖像讀取應在此方法之外進行,因為讀取圖像可能會花費一些時間,您不希望paintComponent()方法阻塞UI直到讀取圖像。 而且它只需要讀取一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.