7
votes

Convertir un JPanel en une image dans un Jscrollpane

Je veux convertir un JPanel en une image. J'ai utilisé la méthode suivante: xxx

mais le problème est que le JPANEL est contenu dans une JScrollPane. Donc, lorsque je convertitons le JPanel en une image, l'image contient uniquement les pièces visibles dans le JPanel et les pièces cachées à l'intérieur du ScrollPane ne sont pas contenues dans l'image.

Y a-t-il des solutions pour obtenir le contenu complet de la JPANEL dans une image?


0 commentaires

3 Réponses :


12
votes

Mais le problème est que le JPANEL est contenu dans un jscrollpane. Donc lorsque je convertitons le jPanel en une image, l'image ne contient que le parties visibles dans le JPANEL et les parties cachées à l'intérieur du Scrollpane ne figure pas dans l'image.

Ce n'arrive pas à moi ... Avez-vous essayé paintall au lieu de peinture ?

Voici une excellente méthode qui va capturer le contenu de tout composant visible ou non (ce n'est pas le mien, je l'ai eu quelque part de la sorte et que je l'ai utilisé depuis): xxx

Voici un exemple mettant en valeur ce qui précède:

la vue Cadre:

Entrez la description de l'image ici

capture du panneau:

 Entrez la description de l'image ici xxx

mise à jour:

selon votre commentaire:

J'ai écrit la bufferedimage dans un fichier en utilisant Imageo.write (bufferedimage, "jpg", fichier); Cela fonctionne bien pour les deux images png et gif, mais l'image JPG montre un fond rouge au lieu de blanc. Comment puis-je faire glisser ce problème? Merci

voir Ceci Question / réponses similaire pour plus. Vous feriez quelque chose comme: xxx


2 commentaires

Merci beaucoup .. ça marche vraiment bien ..: D Mais j'ai un autre problème avec cela. J'ai écrit la bufferedimage dans un fichier en utilisant imageio.write (bufferedimage, "jpg", fichier); Cela fonctionne bien pour les images PNG et GIF, mais JPG Image montre un fond rouge au lieu de blanc. Comment puis-je faire glisser ce problème? Merci


ooppps ...! Cela fonctionne pour les JPG aussi. Merci beaucoup. Et il y a une pièce manquante dans le code ci-dessus, j'ai trouvé cette partie du lien que vous avez précédemment affiché. Ce serait utile pour les autres. Merci encore .... Finale privée Static Int [] RGB_MASKS = {0XFF0000, 0xFF00, 0xFF}; Colormodel final statique privé RGB_OPAQUE = Nouveau DirectColormodel (32, RGB_MASKS [0], RGB_MASKS [1], RGB_MASKS [2]);



3
votes

0 commentaires

1
votes

Je ne sais pas pourquoi vous devez faire quelque chose de si compliqué. Tant que votre image tamponnée et votre fonction de peinture utilisent tous le composant (énorme) qui est dans le jscroolpane, le tout doit être enregistré. XXX


0 commentaires