IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Un problème de Robot!


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut Un problème de Robot!
    Bonjour, je souhaite que mon JPanel affiche une capture dynamique de ce qui ce trouve derrière lui, en gros imiter la transparence!

    Le problème c'est que je n'arrive à afficher que le coin en haut à gauche de mon écran et je ne comprend pas trop pourquoi, si une âme secourable pouvais m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    import java.awt.AWTException;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.image.BufferedImage;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;
     
    public class FrameTransparente extends JFrame 
     
        public FrameTransparente() {
            pack();
            setSize(400, 400);
            setLocationRelativeTo(null);
            setContentPane(new panCapture());
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        }
     
        public static void main(String[] args) {
     
            new FrameTransparente().setVisible(true);
     
        }
     
     
      class panCapture extends JPanel {
     
     
        public panCapture() {
        }
     
        @Override
        public void paintComponent(Graphics g) {
            try {
                Robot robot = new Robot();
                BufferedImage image = robot.createScreenCapture(new Rectangle(this.getX(), this.getY(), this.getWidth(), this.getHeight()));
                g.drawImage(image, this.getX(), this.getY(), this);
                repaint();
            } catch (AWTException ex) {
                System.out.println(ex);
            }
        }
      }
     
    }

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut utiliser une autre version du drawImage couplé au méthodes getLocationOnScreen, getWidth et getHeight de ton JPanel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawImage(img, 0,0,getWidth(),getHeight(),getLocationOnScreen().x,getLocationOnScreen().y,getLocationOnScreen().x+getWidth(),getLocationOnScreen().y+getHeight(),null);

  3. #3
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    Le problème, c'est que tu prends une capture d'écran alors que ta frame est visible à l'écran, donc, tu vas retrouver ta frame dans l'image...

  4. #4
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Robot robot = new Robot();
    BufferedImage image = robot.createScreenCapture(new Rectangle(this.getX(), this.getY(), this.getWidth(), this.getHeight()));
    tu restes dans le coin en haut a gauche car tu prends pour coordonnées this.getX et this.getY or ceci correspond a la position de ton panel dans ta frame soit 0,0

    il faut que tu prennes les coordonnées de la frame (en la passant en parametre par exemple ou bien en appelant 3 fois getparent() dans ton cas)

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En ce qui concerne ma version elle se base sur une capture intégrale de l'écran, j'avais oublié de le préciser

  6. #6
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Merci pour votre aide, j'ai donc modifier ma class ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
     
    import java.awt.AWTException;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;
     
    public class FrameTransparente extends JFrame {
     
     
        BufferedImage image;
     
        public FrameTransparente() {
            pack();
            setSize(400, 400);
            setLocationRelativeTo(null);
            setContentPane(new panCapture());
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            setVisible(true);
        }
     
     
     
        public void screenCapture() {
            try{
                setVisible(false);
                Robot robot = new Robot();
                image = robot.createScreenCapture(new Rectangle(java.awt.Toolkit.getDefaultToolkit().getScreenSize()) );
                setVisible(true);
            }catch(AWTException ex) {
                System.out.println(ex);
            }
        }
     
        public BufferedImage getImage() {
            return image;
        }
     
     
        public static void main(String[] args) {
     
            new FrameTransparente();
     
        }
     
     
    class panCapture extends JPanel {
     
     
     
     
        public panCapture() {
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    screenCapture();
                }
            });
            screenCapture();
        }
     
     
        @Override
        public void paintComponent(Graphics g) {
            g.drawImage(getImage(), 0,0,getWidth(),getHeight(),getLocationOnScreen().x,getLocationOnScreen().y,getLocationOnScreen().x+getWidth(),getLocationOnScreen().y+getHeight(),null);
            repaint();
     
        }
    }
     
    }
    Ça à l'air de fonctionner hormis un faible tremblement de l'image lors des déplacements et parfois une image fantome de la JFrame...
    En tout cas, merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Robot
    Par einboubou dans le forum Langage
    Réponses: 2
    Dernier message: 12/08/2009, 14h23
  2. [GD] Anti-robot : problème de lecture
    Par Rocknacro dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/02/2008, 14h04
  3. Routeur U.S. Robotics : problème redirection de port
    Par webrider dans le forum Hardware
    Réponses: 1
    Dernier message: 11/08/2006, 15h01
  4. [ROBOT] Des problèmes ?
    Par BiM dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 07/08/2006, 12h12
  5. problème class robot
    Par groupe51 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 29/05/2006, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo