[英]No image showing on JFrame when adding image to label
我已經編寫了一些代碼行,應該在 JFrame 中將圖像顯示為 label。 這是代碼。
ImageIcon image = new ImageIcon("funny.jpg");
JLabel label = new JLabel();
label.setIcon(image);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
frame.add(label);
正如您在問題的評論中被提示的那樣,我認為您應該注意確保文件存在於指定位置,例如使用getResource
。
除此之外,您沒有將圖像的觀察者模式用於JLabel
。 嘗試將image
的ImageObserver
設置為label
,如下所示:
ImageIcon image = new ImageIcon("funny.jpg");
JLabel label = new JLabel();
label.setIcon(image);
image.setImageObserver(label); // <-- Added this line.
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
frame.add(label);
否則,請參閱setImageObserver
上的相應文檔。
您也可以查看相應的教程部分。
這恰好是因為,據我所知, ImageIcon
使用MediaTracker
異步加載圖像,因此當您構造ImageIcon
的實例時,它將返回而不會首先阻塞,直到圖像完全加載。 設置ImageIcon
的ImageObserver
將確保您提供的ImageObserver
將在 state 更改時收到有關加載圖像的 state 的通知。 Component
(它是一個ImageObserver
)的默認實現會重新繪制自身,因此您將能夠在圖像准備好時看到完全加載的圖像。
作為替代方案,您始終可以使用ImageIO#read
它將阻塞直到圖像完全加載到 memory (但它只會返回動畫 GIF 圖像中的單個幀)。
雖然我沒有測試它,但這是我經常遇到的一個問題,所以我認為它應該可以工作。 如果有或沒有,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.