【发布时间】:2017-05-14 17:38:02
【问题描述】:
我有一个简单的程序,上面有 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中。绘制缓冲图像,然后repaint()标签以查看更改。需要时保存该图像。 -
@AndrewThompson 所以你想说我不能选择 Jpanel 的图形,在其中绘制然后将结果复制到 BufferedImage?我只能在 BufferedImage 上绘图并将结果复制到 JPanel,是吗?
-
我不想说这样的话。就像我描述的那样更容易。
标签: java swing graphics jframe jpanel