2008-12-02 13 views
2

J'ai une application de bureau ayant des composants lourds (JxBrowser) dans un JFrame. Comment puis-je créer un instantané à partir de l'interface graphique et l'enregistrer par exemple dans un fichier png?Capture de composants Java lourds

Remarque: La méthode utilisant Graphics2d et Component.paint()/paintAll()/print/printAll ne fonctionne que pour les composants légers.

Toutes les réponses ont été appréciées!

EDIT

Je l'ai déjà essayé:

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

Mais je veux la composante intérieure à capturer ...

EDIT

La situation semble pour converger vers cette solution: si j'ai un plus gros composant lourd dans mon JFrame, donc il est rendu sur un JScrollPane alors il n'existe aucune autre méthode pour en obtenir un instantané par programme puis le faire défiler/screenshot avec screencapture?

Répondre

2

Mon nom est Roman et Je suis développeur chez TeamDev.

Composant JxBrowser c'est un composant lourd qui intègre une fenêtre mozilla native pour afficher les pages Web. Pour obtenir une capture d'écran d'une page Web complète à partir du composant JxBrowser, vous pouvez vraiment utiliser la fonctionnalité Java Robot avec le défilement de pages Web. Pour les petites pages Web, cette solution est acceptable. Mais recevoir une capture d'écran d'une grande page Web prendra beaucoup de temps. Notez également que Java Robot permet de capturer uniquement l'écran. Donc, si une fenêtre apparaît sur le composant JxBroser, elle sera également capturée.

Nous avons déjà commencé à travailler sur cette fonctionnalité en termes de projet JxBrowser. La solution qui permettra de capturer une page Web complète, y compris sa partie invisible, est basée sur des éléments internes de Mozilla. Vous serez en mesure de capturer une page Web complète et l'enregistrer en tant qu'image très facile.

Nous allons ajouter cette fonctionnalité dans l'une des prochaines versions de la bibliothèque JxBrowser, mais la date de publication n'est pas encore définie. Si vous le souhaitez, vous pouvez vous abonner au flux RSS de TeamDev: http://support.teamdev.com/blogs/feeds/tags/company_news

Ou faites le moi savoir et je vous informerai quand cette fonctionnalité sera disponible. S'il vous plaît laissez-moi savoir si vous avez d'autres questions. Je serai heureux d'aider.

Cordialement, Roman

1

Vous voulez dire par programmation?

Qu'en est-

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); 

Et puis quelque chose comme ceci:

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

@Pato: J'ai modifié la réponse et placé vos commentaires dans votre question. – OscarRyz

+0

OK! C'est ce que j'aime dans SO! :) –

0

Vous pouvez aussi créer une capture d'écran mettant en œuvre ceci:

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; 
1

API JxBrowser fournit des fonctionnalités qui permet d'enregistrer toute la page Web comme image PNG. S'il vous plaît voir le sample.

Questions connexes