0
我有一個JFrame有4個不同的面板。下圖中右邊的黑框是圖像面板。我正在嘗試編寫一個類,該類允許我將程序中的圖像加載到任何其他類中的任何Panel中。我使用的圖像加載在我的其他類圖像不加載在JPanel是JFrame內
LoadImage.java
package sf;
import java.awt.*;
import java.awt.image.*;
import javax.swing.ImageIcon;
public class LoadImage extends Component {
BufferedImage img;
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public LoadImage(String filename) {
try {
System.out.println(filename);
img = new ImgUtils().scaleImage(380, 360, filename);
} catch (Exception e) {
System.out.println("File not found");
}
}
class ImgUtils {
public BufferedImage scaleImage(int WIDTH, int HEIGHT, String filename) {
BufferedImage bi = null;
try {
ImageIcon ii = new ImageIcon(filename);
bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(ii.getImage(), 0, 0, WIDTH, HEIGHT, null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return bi;
}
}
}
代碼。
private void getProductImage() {
try {
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
String newPath = decodedPath.replace("build/classes/", "src/productImages/");
productImagePanel.add(new LoadImage(newPath + imageCode + ".jpg"));
revalidate();
pack();
} catch (Exception e) {
e.printStackTrace();
}
}
'imageCode'是一旦窗口可見並從數據庫中檢索到的代碼,並且我多次檢查了圖像的路徑。
LoadImage.java獨立工作,如果向其中添加了「主要可運行」方法,則會加載圖像,但我似乎無法在我想要的面板中顯示圖像。請諮詢如何解決我的問題,任何幫助表示讚賞!
感謝您的意見。我熟悉使用JLabel的Icon來顯示圖像。我試圖避免必須使用JLabel來顯示圖像,但如果我沒有使用這些方法,我會使用它.. – HMH
此外,LoadImage.java中的類Imgutils正在調整圖像大小以適應JPanel的大小,我認爲大小不是問題。此外,在初始化並顯示幀時,面板是空的,沒有其他組件。 – HMH
@HHH:你可以將圖像加載到一個JPanel中,並使用JPanel的paintComponent方法繪製它,但是如果你這樣做了,我會將JPanel從開始添加到GUI並只改變圖像部分本身。換句話說,繪圖組件不應該改變,但它繪製的圖像可能被允許改變。但是,我敢打賭,你的組件的大小是0,0或1,1。你可以在paint方法中加入一個'System.out.println(getSize())'來測試你所知道的。另外,如果不需要這樣做,您應該避免混合重量輕和重量輕的組件。 –