Documentation

(jvx:client:gui)

Create a Screenshot and Put It Into the Clipboard

JVx has a simple mechanism to create “screenshots” from components or the entire application. But, if you want to save the screenshot, you need a file/directory chooser and some application logic.

Here's a simple solution for using the system clipboard for your screenshots. This example is based on JVx's SwingUI.

public void doScreenshot() throws Throwable
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
    IDimension dim = getSize();
 
    IImage image = capture(dim.getWidth(), dim.getHeight());
    image.saveAs(baos, ImageType.PNG);
 
    try
    {
        TransferableImage trans = new TransferableImage(baos.toByteArray());
        Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
        c.setContents(trans, trans);
    }
    catch (Exception e)
    {
        //fallback to file chooser
        getApplication().getLauncher().saveFileHandle(
                           new FileHandle("screenshot.png", baos.toByteArray()));
    }
}
public class TransferableImage implements Transferable,
                                          ClipboardOwner
{
    private static final DataFlavor[] DATAFLAVORS = new DataFlavor[] 
                                                        {DataFlavor.imageFlavor};
 
    private Image image;
 
    public TransferableImage(byte[] pData) throws IOException
    {
        image = ImageIO.read(new ByteArrayInputStream(pData));
    }
 
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, 
                                                            IOException
    {
        if (flavor.equals(DataFlavor.imageFlavor) && image != null)
        {
            return image;
        }
        else
        {
            throw new UnsupportedFlavorException(flavor);
        }
    }
 
    public DataFlavor[] getTransferDataFlavors()
    {
        return DATAFLAVORS;
    }
 
    public boolean isDataFlavorSupported(DataFlavor flavor)
    {
        return ArrayUtil.contains(getTransferDataFlavors(), flavor);
    }
 
    public void lostOwnership(Clipboard clipboard, Transferable contents)
    {
    }
 
}

Simply paste the image in another application, e.g., a text document.

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information