Projet gus05 de développement Java
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-20%
Le deal à ne pas rater :
-20% sur le Lot de 2 écrans PC GIGABYTE 27″ LED M27Q
429 € 539 €
Voir le deal

2 manières pour transformer vos JComponent en image

Aller en bas

2 manières pour transformer vos JComponent en image Empty 2 manières pour transformer vos JComponent en image

Message  Gus Dim 26 Juin - 18:55

Salut à tous.

Il ne vous est jamais venu l'envie de générer automatiquement des images à partir des composants graphiques Swing de vos applications Java afin d'illustrer vos notices utilisateur ?

La manière basique consiste à appuyer sur la touche PrintScreen (Imp écr Syst en français) pour faire une impression de votre écran, puis passer sous le logiciel MS Paint pour récupérer l'image et en sélectionner la partie qui vous intéresse. Une petite astuce au passage pour ceux qui ne la connaitraient pas : Il est possible de ne prendre en impression d'écran que la fenêtre active de votre Windows (enfin, la partie visible à l'écran...) en appuyant sur Alt Gr et Imp écr en même temps.

Voyons maintenant ce qu'il est possible de faire en Java. J'ai trouvé 2 moyens, ce qui m'a donné 2 entités de transformation dont je vous donne ici le code source.

Première manière : utiliser la fonctionnalité createScreenCapture(Rectangle) de la classe java.awt.Robot

Code:
package gus05.entity.gus.image.printcomponent;

import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

import java.awt.AWTException;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.Robot;

public class PrintComponent implements Entity, Transform {

    public String getName()         {return "gus.image.printcomponent";}
    public String getCreationDate()      {return "2006.07.07";}

    private Robot robot;
   
    public PrintComponent() throws AWTException
    {robot = new Robot();}

    public Object transform(Object obj) throws Exception
    {
        Component component = (Component)obj;
        Rectangle frame = component.getBounds();
        frame.setLocation(component.getLocationOnScreen());
        return robot.createScreenCapture(frame);
    }
}

Deuxième manière : utiliser la fonctionnalité print(Graphics) de la classe java.awt.Component

Code:
package gus05.entity.gus.image.printcomponent2;

import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;

public class PrintComponent2 implements Entity, Transform {

    public String getName()         {return "gus.image.printcomponent2";}
    public String getCreationDate()      {return "2011.06.26";}

    public Object transform(Object obj) throws Exception
    {
        Component component = (Component)obj;
       
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
      GraphicsDevice gd = ge.getDefaultScreenDevice();
      GraphicsConfiguration gc = gd.getDefaultConfiguration();
      BufferedImage image = gc.createCompatibleImage(component.getWidth(),component.getHeight());
      
      Graphics2D g = image.createGraphics();
        component.print(g);
        g.dispose();
      return image;
    }
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum