2
我想使用2個圖像(從文件加載後)創建FinalImage並顯示它。所以我創建了類:PaintComponent中的BufferedImage始終爲空
public class ImagePanel extends JPanel{
private static final long serialVersionUID = 1L;
private BufferedImage firstImage;
private BufferedImage secondImage;
private BufferedImage finalImage;
public ImagePanel(BufferedImage first, BufferedImage second){
if(first != null && second != null){
this.firstImage = deepCopy(first);
this.secondImage = deepCopy(second);
finalImage = new BufferedImage(firstImage.getWidth()*2, firstImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = finalImage.getGraphics();
g.drawImage(firstImage, 0, 0, null);
g.drawImage(secondImage, firstImage.getWidth(), 0, null);
System.out.println("FinalImage"+finalImage.toString());
}
}
private BufferedImage deepCopy(BufferedImage bi) {
ColorModel cm = bi.getColorModel();
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = bi.copyData(null);
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}
protected void paintComponent(Graphics g) {
super.paintComponents(g);
if(finalImage != null){
g.drawImage(finalImage, 20, 20, null);
}
}
}
但是,當我重繪()這個類時,我總是從finalImage中獲得null。 我用deepCopy,但這種方法不會改變任何東西。 我也檢查了什麼toString方法給予,一切都是okej(它給我finalImage正常的寬度和高度)
有人知道爲什麼null總是給paintComponent方法?
感謝您的幫助:)
我想知道你的問題是否出現在代碼中。也許你正在使用兩個ImagePanel對象。 –
也不要調用super的paintComponents方法,而是調用其paintComponent方法。 –
我有1個私人ImagePanel imagePanel;在MainFrame和構造函數中,我給imagePanel = new ImagePanel(null,null)和next(startButton clicked)imagePanel = new ImagePanel(img1,img2)。我相信img1和img2它不是null。 – Sawior91