簡體   English   中英

使用Java中的paintComponent()方法顯示JPEG圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM