# 2
I have resolved my problem, works good .
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class ScreenImage
{
public void ScreenImage()
{
}
/*
* Create a BufferedImage for Swing components.
* The entire component will be captured to an image.
*
* @param component Swing component to create image from
* @param fileName name of file to be created or null
* @returnimage the image for the given region
* @exception IOException if an error occurs during writing
*/
public static BufferedImage createImage(JComponent component, String fileName)
throws IOException
{
Dimension d = component.getSize();
if (d.width == 0)
{
d = component.getPreferredSize();
component.setSize( d );
}
Rectangle region = new Rectangle(0, 0, d.width, d.height);
return ScreenImage.createImage(component, region, fileName);
}
/*
* Create a BufferedImage for Swing components.
* All or part of the component can be captured to an image.
*
* @param component Swing component to create image from
* @param region The region of the component to be captured to an image
* @param fileName name of file to be created or null
* @returnimage the image for the given region
* @exception IOException if an error occurs during writing
*/
public static BufferedImage createImage(JComponent component, Rectangle region, String fileName)
throws IOException
{
boolean opaqueValue = component.isOpaque();
component.setOpaque( true );
BufferedImage image = new BufferedImage(region.width, region.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setClip( region );
component.paint( g2d );
g2d.dispose();
component.setOpaque( opaqueValue );
ScreenImage.writeImage(image, fileName);
return image;
}
/*
* Create a BufferedImage for AWT components.
*
* @param component AWT component to create image from
* @param fileName name of file to be created or null
* @returnimage the image for the given region
* @exception AWTException see Robot class constructors
* @exception IOException if an error occurs during writing
*/
public static BufferedImage createImage(Component component, String fileName)
throws AWTException, IOException
{
Point p = new Point(0, 0);
SwingUtilities.convertPointToScreen(p, component);
Rectangle region = component.getBounds();
region.x = p.x;
region.y = p.y;
return ScreenImage.createImage(region, fileName);
}
/**
* Convenience method to create a BufferedImage of the desktop
*
* @param fileName name of file to be created or null
* @returnimage the image for the given region
* @exception AWTException see Robot class constructors
* @exception IOException if an error occurs during writing
*/
public static BufferedImage createDesktopImage(String fileName)
throws AWTException, IOException
{
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle region = new Rectangle(0, 0, d.width, d.height);
return ScreenImage.createImage(region, fileName);
}
/**
* Create a BufferedImage from a rectangular region on the screen.
*
* @param region region on the screen to create image from
* @param fileName name of file to be created or null
* @returnimage the image for the given region
* @exception AWTException see Robot class constructors
* @exception IOException if an error occurs during writing
*/
public static BufferedImage createImage(Rectangle region, String fileName)
throws AWTException, IOException
{
BufferedImage image = new Robot().createScreenCapture( region );
ScreenImage.writeImage(image, fileName);
return image;
}
/**
* Write a BufferedImage to a File.
*
* @param image image to be written
* @param fileName name of file to be created
* @exception IOException if an error occurs during writing
*/
public static void writeImage(BufferedImage image, String fileName)
throws IOException
{
if (fileName == null) return;
int offset = fileName.lastIndexOf( "." );
String type = offset == -1 ? "jpg" : fileName.substring(offset + 1);
ImageIO.write(image, type, new File( fileName ));
}
public static void main(String args[])
throws Exception
{
final JFrame frame = new JFrame();
//final JTextArea textArea = new JTextArea(30, 60);
final JTextPane textArea = new JTextPane();
final JScrollPane scrollPane = new JScrollPane( textArea );
frame.getContentPane().add( scrollPane );
textArea.setPage ("FILE:C:\\Java_(linguaggio).htm");
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar( menuBar );
JMenu menu = new JMenu( "File" );
ScreenImage.createImage(menu, "menu.jpg");
menuBar.add( menu );
JMenuItem menuItem = new JMenuItem( "Frame Image" );
menu.add( menuItem );
menuItem.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Let the menu close and repaint itself before taking the image
new Thread()
{
public void run()
{
try
{
Thread.sleep(50);
System.out.println("Creating frame.jpg");
frame.repaint();
ScreenImage.createImage(frame, "frame.jpg");
}
catch(Exception exc) { System.out.println(exc); }
}
}.start();
};
});
final JButton button = new JButton("Create Images");
button.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
System.out.println("Creating desktop.jpg");
ScreenImage.createDesktopImage( "desktop.jpg" );
System.out.println("Creating frame.jpg");
ScreenImage.createImage(frame, "frame.jpg");
System.out.println("Creating scrollpane.jpg");
ScreenImage.createImage(scrollPane, "scrollpane.jpg");
System.out.println("Creating textarea.jpg");
ScreenImage.createImage(textArea, "textarea.jpg");
System.out.println("Creating button.jpg");
ScreenImage.createImage(button, "button.jpg");
button.setText("button refreshed");
button.paintImmediately(button.getBounds());
System.out.println("Creating refresh.jpg");
ScreenImage.createImage(button, "refresh.jpg");
System.out.println("Creating region.jpg");
Rectangle r = new Rectangle(0, 0, 100, 16);
ScreenImage.createImage(textArea, r, "region.png");
}
catch(Exception exc) { System.out.println(exc); }
}
});
frame.getContentPane().add(button, BorderLayout.SOUTH);
try
{
FileReader fr = new FileReader( "ScreenImage.java" );
BufferedReader br = new BufferedReader(fr);
textArea.read( br, null );
br.close();
}
catch(Exception e) {}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}