Pergunta

Eu tenho um aplicativo de desktop que tem componentes pesados ??(JxBrowser) em um JFrame. Como posso fazer um instantâneo da GUI e salve-o, por exemplo, um arquivo PNG?

Nota: O método que usa Graphics2D e Component.paint () / paintAll () / impressão / PRINTALL funciona somente para componentes leves.

Qualquer respostas apreciada!

Editar

Eu já tentei isso:

robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 

Mas eu quero que o componente interior a ser capturado ...

Editar

A situação parece convergir para esta solução: se eu tiver um componente pesado maior no meu JFrame, por isso é rendida em um JScrollPane então existem nenhum outro método para obter um instantâneo dele programaticamente, em seguida, para deslocá-lo / screenshot-lo com screencapture?

Foi útil?

Solução

Meu nome é Roman e eu sou desenvolvedor em TeamDev.

componente JxBrowser é um componente pesado que embedds uma janela mozilla nativa para páginas web de exibição. Para obter screenshot de uma página web cheia de componente JxBrowser você pode realmente usar a funcionalidade Java Robot com a página web de rolagem. Para as pequenas páginas web esta solução é ok. Mas receber screenshot de uma página Web de grandes dimensões vai ter um monte de tempo. Também vale lembrar que Java Robot permite capturar única tela. Então, se alguma janela irá aparecer sobre o componente JxBroser, em seguida, ele será capturado também.

Nós já começamos a trabalhar no essa funcionalidade em termos de projeto JxBrowser. A solução que permitirá a captura de uma página web completa, incluindo a sua parte invisível é baseado em coisas internas Mozilla. Você será capaz de capturar uma página web completa e salvá-lo como imagem muito fácil.

Vamos adicionar esta funcionalidade em um da próxima versão do biblioteca JxBrowser, mas a data de lançamento ainda não está definida. Se quiser, você pode assinar o feed RSS do TeamDev: http://support.teamdev.com / blogs / feeds / tags / company_news

Ou apenas deixe-me saber e eu vou informá-lo quando essa funcionalidade estará disponível. Por favor me avise se você tiver alguma dúvida. Eu vou ser feliz para ajudar.

Saudações, Roman

Outras dicas

Você quer dizer programaticamente?

E

Point p = yourAwtComponent.getLocationOnScreen();
int w   = yourAwtComponent.getWidth();
int h   = yourAwtComponent.getHeight();

Rectangle rectangle = new Rectangle( p.x, p.y, w, h );

Image image = robot.createScreenCapture(rectangle);

E, então, algo como isto:

ImageIO.write( image, "png", file );

JxBrowser API fornece a funcionalidade que permite salvar toda a página web imagem PNG como. Consulte o amostra .

Você pode tentar também para criar uma imagem com a implementação deste:

    int width = frameContainer.getWidth();
    int height = frameContainer.getHeight();

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();

    frameContainer.paint(g2);

    return image;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top