How capture entire JTextPane graphics ?

Hello i have JTextPane ,

I would want to capture the entire graphics and to transform to image.

the problem that I would want to capture all the portion that scrollable .

i have this metod but capture visible graphics.

Component comp = myTextPane;

int w = comp.getWidth();

int h = comp.getHeight();

BufferedImage image = comp.getGraphicsConfiguration().createCompatibleImage(w, h);

Graphics2D g = image.createGraphics();

comp.paint(g);

g.dispose();

i need method for capture all entire graphics.

Thanks

[581 byte] By [nturria] at [2007-11-26 15:30:20]
# 1
Works for me. Can you post a small example application that demonstrates the problem?
Jasprea at 2007-7-8 21:46:55 > top of Java-index,Desktop,Core GUI APIs...
# 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);

}

}

nturria at 2007-7-8 21:46:55 > top of Java-index,Desktop,Core GUI APIs...
# 3
After 120 postings on the forum learn how to use the forum correctly and place the code within the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags[/url] so the code reatains its formatting and is readable.
camickra at 2007-7-8 21:46:55 > top of Java-index,Desktop,Core GUI APIs...