我有一個簡單的JFrame和Jpanel程序,我想在JPanel上繪製一條線並將繪圖的結果保存到圖像。但它完全不起作用。爲什麼我的圖像不保存
我哪裏錯了?
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
public class source {
public static void main(String[] args) {
JFrame window = new JFrame("TEST");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setVisible(true);
mainPanel.setSize(800, 600);
mainPanel.setPreferredSize(new Dimension(300,300));
window.setContentPane(mainPanel);
window.setSize(800, 600);
window.pack();
window.setVisible(true);
Graphics g = mainPanel.getGraphics();
g.setColor(Color.BLACK);
g.drawLine(0, 0, 50, 50);
BufferedImage image = (BufferedImage)mainPanel.createImage(300, 300);
try {
System.out.println("Saved");
ImageIO.write(image, "PNG", new File("filename1.png"));
} catch (IOException ex) {
Logger.getLogger(source.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Not saved");
}
}
}
'mainPanel.createImage(300,300);'產生一個空白圖像,兼容在面板上顯示。它不是**是目前面板上的圖片。順便說一句 - 有另一種方法來解決這個問題。創建一個'BufferedImage'以顯示在'JLabel'中。在緩衝的圖像上繪製,然後'重繪()'標籤以查看更改。需要時保存該圖像。 –
@AndrewThompson所以你想說,我不能選擇一個Jpanel的圖形,繪製它,然後將結果複製到BufferedImage?我只能使用BufferedImage並將結果複製到JPanel,是嗎? – Nawy
我不想說任何這樣的事情。這只是**更容易**我描述的方式。 –