我现在在jpanel里面画了一个图,超出屏幕范围,然后我用下面代码保存 Component c = jpanel;
BufferedImage bi = (BufferedImage)c.createImage(c.getWidth(),c.getHeight());
System.out.print(c.getHeight());
c.paint(bi.getGraphics());
try {
javax.imageio.ImageIO.write(bi, "jpg", new File("c:/x1.jpg"));
} catch (IOException ex) {
Logger.getLogger(Form_Against_Graph.class.getName()).log(Level.SEVERE, null, ex);
}
结果发现保存下来的图片画到一半的时候就从最初位置重画了。如图说明:在jpanel里面画的图没有问题,就是保存的时候变成这个样子,请问是有谁知道是怎么一回事,在哪里需要设置的么?
BufferedImage bi = (BufferedImage)c.createImage(c.getWidth(),c.getHeight());
System.out.print(c.getHeight());
c.paint(bi.getGraphics());
try {
javax.imageio.ImageIO.write(bi, "jpg", new File("c:/x1.jpg"));
} catch (IOException ex) {
Logger.getLogger(Form_Against_Graph.class.getName()).log(Level.SEVERE, null, ex);
}
结果发现保存下来的图片画到一半的时候就从最初位置重画了。如图说明:在jpanel里面画的图没有问题,就是保存的时候变成这个样子,请问是有谁知道是怎么一回事,在哪里需要设置的么?
import java.awt.*;
import java.io.*;
import java.awt.image.*;public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setSize(400, 300);
Component c = new MyPanel();
c.setSize(new Dimension(500, 500));
frame.add(c);
frame.setVisible(true);
BufferedImage bi = (BufferedImage)c.createImage(c.getWidth(),c.getHeight());
c.paint(bi.getGraphics());
try {
javax.imageio.ImageIO.write(bi, "jpg", new File("c:/x1.jpg"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < 10; i++) {
g.drawRect(i * 50, i * 50, 50, 50);
}
}
}
解决方法:在JPanel里面重写paint函数,而不是重写paintComponent函数。
结贴。
import java.awt.*;
import java.io.*;
import java.awt.image.*;public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(400, 300);
Component c = new MyPanel();
c.setPreferredSize(new Dimension(1500, 1500));
frame.add(new JScrollPane(c));
frame.setVisible(true);
BufferedImage bi = (BufferedImage)c.createImage(c.getWidth(),c.getHeight());
c.paint(bi.getGraphics());
try {
javax.imageio.ImageIO.write(bi, "jpg", new File("c:/x1.jpg"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < 35; i++) {
g.drawRect(i * 50, i * 50, 50, 50);
}
}
}楼主可能是哪里又改变了什么东西造成了重绘,总之应该不是paintComponent方法的问题