我如何获得java.awt.ImageJFrame?
我想获得一个屏幕截图JFrame(以后在我的应用程序中使用).目前,这是通过使用机器人拍摄指定所JFrame涉及的坐标和尺寸的屏幕截图来完成的.
但是,我相信有一种更好的方法:默认情况下,Swing组件在将自己绘制到屏幕上之前将它们自身渲染为双缓冲区.
有没有办法从组件中获取这些图像?
我试图创建一个绘制矩形的JPanel.小组需要绘制很多矩形,但它们不会移动.我的问题的一个解决方案是创建一个包含我已经创建的所有矩形的列表,并在每次调用"Paint"时绘制它们.但是有很多矩形,它会减慢计算机的速度.
我也尝试使用重绘(x,y,高度,宽度)来清理新矩形的空间,但它不起作用.(JPanel不断擦除以前的矩形.)在排序中,我需要绘制每个油漆都不会消失的矩形.或者是一种不会擦除先前绘制的绘画方法,或者不会绘制背景.这是我的JPanel类的一部分:
class MyPanel extends JPanel{
private int x, y, size;
private Color c;
public void DrawRect(int x, int y, int size, Color c){
this.x = x;
this.y = y;
this.size = size;
this.c = c;
repaint();
}
@Override
public void
paint(Graphics g) {
g.setColor(c);
g.fillRect(x, y, size, size);
}
Run Code Online (Sandbox Code Playgroud)
}
我有一个简单的应用程序,允许用户在画布控件中绘制.
现在,我想要的是将画布转换为图像.所以这是我的代码.
public void paint(Graphics g)
{
//super.paint(g);
Graphics2D draw = (Graphics2D) g;
if(this.is_beginning || this.to_save)
{
draw.setColor(Color.white);
draw.fillRect(0, 0, this.getWidth(), this.getHeight());
this.is_beginning= false;
}
if(this.m_alzada)
{
draw.setColor(Color.red);
draw.drawLine(uX, uY, x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我保存图像的方法.
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
int w = canvas1.getWidth();
int h = canvas1.getHeight();
int type = BufferedImage.TYPE_INT_BGR;
BufferedImage image = new BufferedImage(w,h,type);
Graphics2D g2 = image.createGraphics();
canvas1.to_save = true;
canvas1.paint(g2);
try {
ImageIO.write(image, "png", new File("C:/Users/Uriel/Desktop/ejemplo.png"));
} catch (IOException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
} …Run Code Online (Sandbox Code Playgroud)