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

 Java Discussion :

Afficher un background dans ma fenêtre


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Afficher un background dans ma fenêtre
    Bonjour,

    Tout nouveau sur votre site, je me presente : Fred.

    J'aime bien apprendre et connaitre le pourquoi du comment. J'ai réussi il y a quelque temps avec une source en kotlin/java, à optimiser un programme et à modifier pas mal de chose.

    La, je suis sur un nouveau projet en java et je galère beaucoup. Mes problèmes : je n'arrive pas à afficher un background en fond de ma fenêtre. Je pense que la forme de mes jframe/jpanel ne vont pas du tout. Les clics de bouton de la souris font une action en boolean (true ou false), Ceci fonctionne trés bien. Mais dans ma fenêtre ça m'affiche "true ou false" et je voudrais afficher à la place "active" ou " pas "active".

    Par quoi commence t'on? XD Merci à l'avance pour toute l'aide que vous m'apporterez.

    Fred

  2. #2
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Le code
    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
    77
    78
    79
    80
    81
    82
    83
    84
     package r1bellu2b.norecoil;
     
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import java.awt.Color;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import org.jnativehook.GlobalScreen;
    import org.jnativehook.NativeHookException;
     
     
     
     
     
     
    public class Main {
     
      static final String CONFIG_DIR = "configs/";
      static final String DEFAULT_CONFIG = CONFIG_DIR + "default.json";
      public static boolean rightClick;
      static boolean enabled = false;
      static boolean shooting = false;
      static boolean zoom = false;
      static Gson gson = new GsonBuilder().setPrettyPrinting().create();
     
      public static void main(String[] args) {
        try {
     
     
          Fenetre fen = new Fenetre();
     
     
     
     
          System.out.println("INSERT TO TOGGLE RECOIL ON/OFF");
          System.out.println("F12 TO KILL");
          System.out.println("END TO CYCLE CONFIGS");
          setupConfigs();
          //setupGUI();
          setupEvents();
        } catch (NativeHookException ex) {
          System.err.println("There was a problem registering the native hook.");
          System.err.println(ex.getMessage());
          System.exit(1);
        }
      }
     
      private static void setupEvents() throws NativeHookException {
        Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
        logger.setLevel(Level.SEVERE);
        logger.setUseParentHandlers(false);
        GlobalScreen.registerNativeHook();
        KeyBoardListener keyBoardListener = new KeyBoardListener();
        GlobalScreen.addNativeKeyListener(keyBoardListener);
        MouseListener mouseListener = new MouseListener();
        GlobalScreen.addNativeMouseListener(mouseListener);
        GlobalScreen.addNativeMouseMotionListener(mouseListener);
      }
     
      private static void setupConfigs() {
        MouseListener.executorService.execute(() -> {
          try {
            if (new File(CONFIG_DIR).mkdir()) {
              System.out.println("Default config saved");
            }
            File file = new File(DEFAULT_CONFIG);
            if (!file.exists()) {
              FileWriter fileWriter = new FileWriter(file);
              gson.toJson(new Config(), fileWriter);
              fileWriter.close();
              System.out.println("Saving default config");
            }
            ConfigManager.getInstance().readConfigs();
          } catch (IOException e) {
            e.printStackTrace();
          }
        });
      }
     
    }





    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
    77
    78
    79
     package r1bellu2b.norecoil;
     
            import javax.imageio.ImageIO;
            import javax.swing.*;
            import java.awt.*;
     
    public class Fenetre extends JFrame {
        public Fenetre(){
            this.setTitle("NoRecoil By R1beLlu");
            this.setSize(600, 300);
            this.setLocationRelativeTo(null);
          this.getContentPane().setBackground(Color.yellow); //FOND DE COULEUR
            this.setVisible(true);
            this.setAlwaysOnTop(true);
            this.setResizable(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
     
     
     
     
     
     
            Action action = new Action();
     
            this.getContentPane().add(action);
     
     
            MouseListener.executorService.execute(() -> {
                while (!MouseListener.executorService.isShutdown()) {
                    action.repaint();
                    try {
                        Thread.sleep(50);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
     
        }
     
     
     
     
        public class Action extends JComponent {
     
     
     
     
            Font myFont = new Font("Serif", Font.BOLD, 30);
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                if (g instanceof Graphics2D) {
                    Graphics2D g2 = (Graphics2D) g;
                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
                    g2.setFont(myFont);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Active:", 50, 60);
                    g2.setColor(Main.enabled ? Color.GREEN : Color.RED);
                    g2.drawString(Main.enabled + "", 150, 60);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("X4:", 50, 120);
                    g2.setColor(Main.zoom ? Color.GREEN : Color.RED);
                    g2.drawString(Main.zoom + "", 150, 120);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Config:", 50, 185);
                    g2.setColor(Color.BLUE);
                    g2.drawString(ConfigManager.getInstance().getCurrentConfig().name, 150, 185);
                }
     
            }
     
        }
     
     
        }

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Pour afficher "active" ou "pas active", en fonction de la valeur de enabled, il ne faut pas afficher la valeur de enabled, qui étant un boolean, ne peut avoir que la valeur true ou false
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      g2.drawString(Main.enabled?"active":"pas active", 150, 60);
    2. pourquoi se substituer à AWT/Swing en redessinant tout à la main, en faisant je ne sais quoi avec MouseListener (tu n'as pas donné le code de cette classe), en réinventant tout ce qui est déjà fait de manière bien plus simple et efficace ?
    3. Et pourquoi jna pour gérer la souris ? AWT/Swing s'occupe très bien de ça aussi.
    4. Quel type de backgroud veux-tu afficher, parce que tu parles de ça dans le titre, mais il n'en ai fait référence nulle part ensuite, ni dans tes questions ni même dans le code que tu montres.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    Merci pour votre réponse. Je vais tester le code pour affiche un terme en lieu de true et false.

    Pour le background, c'est celui de ma jframe, mais après beaucoup de test, j'ai réussi (problème chemin accès du fichier image) mais un autre problème surviens. Si je mets juste une couleur en background, j'ai mon texte affiché. Si je mets l'image, mon texte est caché dessous. Je pense que c'est dû au fait que à la base le code s'affichait en overlay).

    Je suis en train de repartir du début sur tout le code pour tenter de l'écrire dans les règles.

    Le but du code c'est lorsque on maintient le clic droit enfoncé de la souris et qu'on appuie sur le bouton gauche, la souris descend/monte/droite/gaucge automatiquement à l'écran bien entendu en fonction des fichiers config créer).

    En fonction des options active (d'ou le true/false) la souris se déplacera plus ou moins vite, droite gauche....




    Après la source du code je l'ai récupéré sur github et je tente d'apporter tous les changement dont j'ai besoin.

    Merci
    Cordialement

    Fred

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par R1beLlu2B Voir le message
    Pour le background, c'est celui de ma JFrame, mais après beaucoup de tests, j'ai réussi (problème chemin accès du fichier image) mais un autre problème survient. Si je met juste une couleur en background , j'ai mon texte affiché. Si je mets l'image, mon texte est caché dessous.(je pense que c'est dû que à la base le code s'affichait en overlay).
    Ce que je voulais savoir si c'était une image ou autre chose (une couleur, une texture...). Pour l'image, il suffit de la dessiner avant d'afficher le reste : les trucs s'exécutent dans l'ordre, forcément, si tu dessines une image après tout le reste, elle le sera par dessus (après il y a la solution du composite pour faire le dessin après, mais c'est bien plus simple de la dessiner avant le reste).

    Citation Envoyé par R1beLlu2B Voir le message
    Je suis en train de repartir du début sur tout le code pour tenter de l'écrire dans les règles.
    Avec des JLabels j'espère bien, et sans ExecutorService qui ne sert strictement à rien (on redessine au besoin, proprement, et pas toutes les 50 ms comme un bourrin, surtout en testant la mort d'un ExecutorService) et qui pompent des ressources inutilement.

    Citation Envoyé par R1beLlu2B Voir le message
    Le but du code c'est lorsqu'on maintient le clique droit enfoncé de la souris et qu'on appuie sur le bouton gauche, la souris descend/monte/droite/gauche automatiquement à l'ecran bien entendu en fonction des fichiers config créés).
    Alors, je ne comprends rien. La souris, on la déplace sur sa table, son tapis à souris, ou ce genre de choses. Si tu parles du pointeur de la souris, c'est le système qui s'en occupe, on n'a pas besoin de gérer soi-même le déplacement du pointeur de la souris depuis des décades.
    Je ne parle même pas de la manipulation peu ergonomique de devoir cliquer sur 2 boutons pour déplacer quoi que ce soit (et de ceux qui vont bien être ennuyés avec le souris à un bouton). Et la direction serait dans un fichier de config ? C'est pour faire un défilement sans ascenseur c'est ça ? La molette, c'est pas bien pour ça ?

    Citation Envoyé par R1beLlu2B Voir le message
    En fonction des option active (d'ou le true/false) la souris se deplacera plus ou moins vite, droite gauche....
    2 vitesses possibles donc ? Décidément, entre le système d'affichage complètement à la mano, le défilement de l'écran ou déplacement de je ne sais quoi atypique, et ce truc, tu réinventes un système standard qui fonctionne déjà très bien. Je me demande bien pourquoi.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    re bonjour,

    je me suis mal exprime.

    oui c'est bien en effet le pointeur qui bougera tout seul.

    En faite je pars sur le principe de base des "norecoil" que l'on trouve facilement en "lua" par exemple (script pour souris logitech) ou en AHK (auto hot key).

    Donc pour ce faite, j'ai besoins que quand je maintien le clique droit et que j'appuie sur le gauche mon pointeur se met a bouge tout seul.

    Dans mon fichier config, il y a divers configuration, c'est a dire plusieurs choix de vitesse en fonction du parametre que je choisi.


    j'espere que c'est un peu plus claire comme explication

    le code de mouselistener mais a ce niveau tout fonctionne bien
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    package r1bellu2b.norecoil;
     
    import java.awt.MouseInfo;
    import java.awt.Point;
    import java.awt.Robot;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import org.jnativehook.mouse.NativeMouseEvent;
    import org.jnativehook.mouse.NativeMouseInputListener;
     
    public class MouseListener implements NativeMouseInputListener {
     
      static ExecutorService executorService = Executors.newFixedThreadPool(4);
     
      public void nativeMouseClicked(NativeMouseEvent e) {
      }
     
      public void nativeMousePressed(NativeMouseEvent e) {
        if (e.getButton() == 3) {
          Main.zoom = !Main.zoom;
          System.out.println("FAR ZOOM MODE: " + Main.zoom);
        }
        if (e.getButton() == 2) {
          Main.rightClick = true;
        }
        if (e.getButton() != 1) {      return;
        }
        Main.shooting = true;
        Config currentConfig = ConfigManager.getInstance().getCurrentConfig();
     
        executorService.submit(() -> {
          try {
            Robot robot = new Robot();
            robot.setAutoDelay(0);
            Point point;
            int correctionX;
            int correctionY;
            int beforeSleep;
            int afterSleep;
            while (Main.enabled && Main.shooting) {
              if (Main.zoom) {
                if (Main.rightClick) {
                  correctionX = currentConfig.correctionZoomRightClickX;
                  correctionY = currentConfig.correctionZoomRightClickY;
                  beforeSleep = currentConfig.beforeShotSleepRightClickZoom;
                  afterSleep = currentConfig.afterShotSleepRightClickZoom;
                } else {
                  correctionX = currentConfig.correctionZoomX;
                  correctionY = currentConfig.correctionZoomY;
                  beforeSleep = currentConfig.beforeShotSleepZoom;
                  afterSleep = currentConfig.afterShotSleepZoom;
                }
              } else {
                if (Main.rightClick) {
                  correctionX = currentConfig.correctionRightClickX;
                  correctionY = currentConfig.correctionRightClickY;
                  beforeSleep = currentConfig.beforeShotSleepRightClick;
                  afterSleep = currentConfig.afterShotSleepRightClick;
                } else {
                  correctionX = currentConfig.correctionX;
                  correctionY = currentConfig.correctionY;
                  beforeSleep = currentConfig.beforeShotSleep;
                  afterSleep = currentConfig.afterShotSleep;
                }
              }
              Thread.sleep(beforeSleep);
              point = MouseInfo.getPointerInfo().getLocation();
              robot.mouseMove(point.x + correctionX, point.y + correctionY);
              Thread.sleep(afterSleep);
            }
          } catch (Exception e1) {
            e1.printStackTrace();
          }
        });
      }
     
      public void nativeMouseReleased(NativeMouseEvent e) {
        if (e.getButton() == 2) {
          Main.rightClick = false;
        }
        if (e.getButton() == 1) {
          Main.shooting = false;
        }
      }
     
      public void nativeMouseMoved(NativeMouseEvent e) {
      }
     
      public void nativeMouseDragged(NativeMouseEvent e) {
      }
     
      public int greatestCommon(int i, int j) {
        return (j == 0) ? i : greatestCommon(j, i % j);
      }
     
     
    }

    merci

    Cordialement

    Fred

  7. #7
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Par contre c'est la que je bloque, je ne sait pas comment faire pour que la class Action affiche ce que je veut a l'ecran.
    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
    package r1bellu2b.norecoil;
     
    import javax.swing.*;
    import java.awt.*;
     
    public class Action extends JComponent {
     
     
     
     
            Font myFont = new Font("Serif", Font.BOLD, 30);
            @Override
     
     
            public void paintComponent (Graphics g){
                super.paintComponent(g);
                if (g instanceof Graphics2D) {
                    Graphics2D g2 = (Graphics2D) g;
                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
                    g2.setFont(myFont);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Active:", 50, 60);
                    g2.setColor(Main.enabled ? Color.GREEN : Color.RED);
                    g2.drawString(Main.enabled ? "active" : "pas active", 150, 60);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("X4:", 50, 120);
                    g2.setColor(Main.zoom ? Color.GREEN : Color.RED);
                    g2.drawString(Main.zoom + "", 150, 120);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Config:", 50, 185);
                    g2.setColor(Color.BLUE);
                    g2.drawString(ConfigManager.getInstance().getCurrentConfig().name, 150, 185);
     
                }
     
            }
     
        }

    j'ai refait mon code je pense plus proprement :

    Mon Main
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    package r1bellu2b.norecoil;
     
     
            import com.google.gson.Gson;
            import com.google.gson.GsonBuilder;
            import org.jnativehook.GlobalScreen;
            import org.jnativehook.NativeHookException;
     
            import java.awt.image.BufferedImage;
            import java.io.*;
            import java.util.logging.Level;
            import java.util.logging.Logger;
            import javax.imageio.ImageIO;
            import javax.swing.*;
     
    public class Main {
     
     
        static final String CONFIG_DIR = "configs/";
        static final String DEFAULT_CONFIG = CONFIG_DIR + "default.json";
        public static boolean rightClick;
        static boolean enabled = false;
        static boolean shooting = false;
        static boolean zoom = false;
        static Gson gson = new GsonBuilder().setPrettyPrinting().create();
     
     
     
     
     
     
     
     
      public static void main(String[] args) throws IOException {
     
        String path = "ribellu.jpg";
        BufferedImage image = ImageIO.read(new File(path));
        Image contentPane = new Image(image);
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setContentPane(contentPane);
        f.setSize(600, 310);
          f.setIconImage(new ImageIcon("icone.gif").getImage());
          f.setTitle("NoRecoil By R1beLlu");
          f.setLocationRelativeTo(null);
          f.setAlwaysOnTop(true);
          f.setResizable(false);
          f.setVisible(true);
     
          try {
     
              System.out.println("INSERT TO TOGGLE RECOIL ON/OFF");
              System.out.println("F12 TO KILL");
              System.out.println("END TO CYCLE CONFIGS");
              setupConfigs();
              //setupGUI();
              setupEvents();
          } catch (NativeHookException ex) {
              System.err.println("There was a problem registering the native hook.");
              System.err.println(ex.getMessage());
              System.exit(1);
          }
     
     
      }
     
        private static void setupEvents() throws NativeHookException {
            Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
            logger.setLevel(Level.SEVERE);
            logger.setUseParentHandlers(false);
            GlobalScreen.registerNativeHook();
            KeyBoardListener keyBoardListener = new KeyBoardListener();
            GlobalScreen.addNativeKeyListener(keyBoardListener);
            MouseListener mouseListener = new MouseListener();
            GlobalScreen.addNativeMouseListener(mouseListener);
            GlobalScreen.addNativeMouseMotionListener(mouseListener);
        }
     
        private static void setupConfigs() {
            MouseListener.executorService.execute(() -> {
                try {
                    if (new File(CONFIG_DIR).mkdir()) {
                        System.out.println("Default config saved");
                    }
                    File file = new File(DEFAULT_CONFIG);
                    if (!file.exists()) {
                        FileWriter fileWriter = new FileWriter(file);
                        gson.toJson(new Config(), fileWriter);
                        fileWriter.close();
                        System.out.println("Saving default config");
                    }
                    ConfigManager.getInstance().readConfigs();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
     
     
     
     
     
     
     
     
    }
    mon image dans ma Jframe
    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
    package r1bellu2b.norecoil;
     
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import javax.swing.JPanel;
     
    public class Image extends JPanel {
        BufferedImage image;
     
        public Image(BufferedImage image) {
            this.image = image;
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            int x = (getWidth() - image.getWidth()) / 2;
            int y = (getHeight() - image.getHeight()) / 2;
            g.drawImage(image, x, y, this);
        }
    }


    je rate quelque chose mais je ne vois pas


    Merci

    Cordialement

    Fred

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par R1beLlu2B Voir le message
    En faite je pars sur le principe de base des "norecoil" que l'on trouve facilement en "lua" par exemple (script pour souris logitech) ou en AHK (auto hot key).
    Je comprends mieux le besoin de jna. En revanche, utilise plutôt un Timer Swing, et ne crée qu'une instance de Robot, une fois pour toute, au lieu d'en créer tout le temps (lorsque le GC va se réveiller pour nettoyer la mémoire, tu risques un gros lag).


    Citation Envoyé par R1beLlu2B Voir le message
    Par contre c'est la que je bloque, je ne sait pas comment faire pour que la class Action affiche ce que je veut a l'ecran.
    Bah tu as fait une nouvelle classe qui n'affiche qu'une image pour afficher le contentpane. Ce qu'il y a dans Action ne risque pas de s'afficher. Je t'ai dit d'afficher l'image avant.

    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
     
    public class Action extends JComponent {
     
     
     
     
            Font myFont = new Font("Serif", Font.BOLD, 30);
            @Override
     
            /*protected, pas public !!! */
            protected void paintComponent (Graphics g){
                super.paintComponent(g);
                if (g instanceof Graphics2D) {
     
                    // dessine l'image avant 
                    int x = (getWidth() - image.getWidth()) / 2;
                    int y = (getHeight() - image.getHeight()) / 2;
                    g.drawImage(image, x, y, this);
     
                    Graphics2D g2 = (Graphics2D) g;
                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
                    g2.setFont(myFont);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Active:", 50, 60);
                    g2.setColor(Main.enabled ? Color.GREEN : Color.RED);
                    g2.drawString(Main.enabled ? "active" : "pas active", 150, 60);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("X4:", 50, 120);
                    g2.setColor(Main.zoom ? Color.GREEN : Color.RED);
                    g2.drawString(Main.zoom + "", 150, 120);
                    g2.setColor(Color.MAGENTA);
                    g2.drawString("Config:", 50, 185);
                    g2.setColor(Color.BLUE);
                    g2.drawString(ConfigManager.getInstance().getCurrentConfig().name, 150, 185);
     
                }
     
            }
     
        }
    Et tu utilises une instance d'Action comme content pane.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    merci beaucoup du coup de main.


    Ca y est, j'ai enfin mon fond avec mes information.

    Mais nouveau probleme XD, j'ai perdu les animations.

    tout fonctionne mais pas de changement de statut "active" ou "pas active", ca reste fige...

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Est-ce que la modification de enabled est faite dans un autre thread que le thread de Swing (Event Dispatch Thread) ? Cela est probable si c'est effectué via le listener "jna". Du coup la valeur ne sera pas mise à jour pour l'EDT (pour des raisons d'optimisation les threads possèdent chacun une sorte copie de la variable et la modification par un thread n'est pas vue des autres), et même si on fait un repaint, l'affichage non plus. Tu peux le vérifier en traçant quel thread met à jour la variable enabled (System.out.println(Thread.currentThread());) : si tu n'obtiens pas AWT-EventQueue-0, c'est confirmé.
    C'est aussi une raison pour ne pas chercher à refaire tout à la place de Swing. Au plus simple, tu peux déclarer ta variable enabled volatile pour contourner le problème.
    Ce serait tout de même mieux d'utiliser des composants Swing (JLabel) et faire la mise à jour de l'affichage par SwingPropertyChangeSupport (ou PropertyChangeSupport déléguant à SwingPropertyChangeSupport).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    merci du temps que vous m'accordez.

    j'ai réussi a faire tout fonctionne.

    j'ai modifie quelque petit chose et sa marche :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    package r1bellu2b.norecoil;
     
     
            import com.google.gson.Gson;
            import com.google.gson.GsonBuilder;
            import org.jnativehook.GlobalScreen;
            import org.jnativehook.NativeHookException;
     
     
            import java.awt.image.BufferedImage;
            import java.io.*;
            import java.util.logging.Level;
            import java.util.logging.Logger;
            import javax.imageio.ImageIO;
            import javax.swing.*;
     
    public class Main {
     
     
        static final String CONFIG_DIR = "configs/";
        static final String DEFAULT_CONFIG = CONFIG_DIR + "default.json";
        public static boolean rightClick;
        static boolean  enabled = false;
        static boolean shooting = false;
        static boolean zoom = false;
        static Gson gson = new GsonBuilder().setPrettyPrinting().create();
     
     
     
     
      public static void main(String[] args) throws IOException {
     
          String path = "ribellu.jpg";
          BufferedImage image = ImageIO.read(new File(path));
          Action action = new Action(image);
          JFrame f = new JFrame();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.setContentPane(action);
          f.setSize(600, 310);
          f.setIconImage(new ImageIcon("icone.gif").getImage());
          f.setTitle("NoRecoil By R1beLlu");
          f.setLocationRelativeTo(null);
          f.setAlwaysOnTop(true);
          f.setResizable(false);
          f.setVisible(true);
     
     
          MouseListener.executorService.execute(() -> {
            while (!MouseListener.executorService.isShutdown()) {
                action.repaint();
                try {
                    Thread.sleep(50);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
     
     
          try {
              System.out.println(Thread.currentThread());
              System.out.println("INSERT TO TOGGLE RECOIL ON/OFF");
              System.out.println("F12 TO KILL");
              System.out.println("END TO CYCLE CONFIGS");
              setupConfigs();
              //setupGUI();
              setupEvents();
          } catch (NativeHookException ex) {
              System.err.println("There was a problem registering the native hook.");
              System.err.println(ex.getMessage());
              System.exit(1);
          }
     
     
      }
     
        private static void setupEvents() throws NativeHookException {
            Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
            logger.setLevel(Level.SEVERE);
            logger.setUseParentHandlers(false);
            GlobalScreen.registerNativeHook();
            KeyBoardListener keyBoardListener = new KeyBoardListener();
            GlobalScreen.addNativeKeyListener(keyBoardListener);
            MouseListener mouseListener = new MouseListener();
            GlobalScreen.addNativeMouseListener(mouseListener);
            GlobalScreen.addNativeMouseMotionListener(mouseListener);
        }
     
        private static void setupConfigs() {
            MouseListener.executorService.execute(() -> {
                try {
                    if (new File(CONFIG_DIR).mkdir()) {
                        System.out.println("Default config saved");
                    }
                    File file = new File(DEFAULT_CONFIG);
                    if (!file.exists()) {
                        FileWriter fileWriter = new FileWriter(file);
                        gson.toJson(new Config(), fileWriter);
                        fileWriter.close();
                        System.out.println("Saving default config");
                    }
                    ConfigManager.getInstance().readConfigs();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
    }
    et le action:
    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
    package r1bellu2b.norecoil;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
     
    public class Action extends JComponent {
     
     
        BufferedImage image;
        public Action(BufferedImage image) {
            this.image = image;
        }
        Font myFont = new Font("Serif", Font.BOLD, 30);
        @Override
     
            /*protected, pas public !!! */
        protected void paintComponent (Graphics g){
            super.paintComponent(g);
            if (g instanceof Graphics2D) {
     
                // dessine l'image avant
                int x = (getWidth() - image.getWidth()) / 2;
                int y = (getHeight() - image.getHeight()) / 2;
                g.drawImage(image, x, y, this);
     
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                g2.setFont(myFont);
                g2.setColor(Color.MAGENTA);
                g2.drawString("Active:", 50, 60);
                g2.setColor(Main.enabled ? Color.GREEN : Color.RED);
                g2.drawString(Main.enabled ? "active" : "pas active", 150, 60);
                g2.setColor(Color.MAGENTA);
                g2.drawString("X4:", 50, 120);
                g2.setColor(Main.zoom ? Color.GREEN : Color.RED);
                g2.drawString(Main.zoom + "", 150, 120);
                g2.setColor(Color.MAGENTA);
                g2.drawString("Config:", 50, 185);
                g2.setColor(Color.BLUE);
                g2.drawString(ConfigManager.getInstance().getCurrentConfig().name, 150, 185);
     
            }
     
        }
     
    }
    Maintenant, je vais change titre, les termes.....

    je vais regarde egalement ce dont vous m'avez parlé pour le Timer SWING mais je ne sais pas du tout ce que c'est ni comment ca marche.


    Merci

    Fred

  12. #12
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    Je voulais vous remercie pour l'aide apporte.

    j'ai bien avance .

    Je me demande si on enlevé "a la vole" le contour de la jframe?

    je connais le code pour l'enlever en permanence mais je voudrais l'enlever ou la remettre par pression d'une touche.

    j'ai déja écrit le code pour le bouton mais je ne trouve pas comment écrire le code pour la variable boolean.

    j'ai essaye ca : static boolean setUndecorated(true);

    mais ca ne marche pas.

    j'ai cherche un peu de partout mais je n'es rien trouve.

    Si vous auriez une idee?


    merci

    Fred

  13. #13
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    J'ai teste de faire ca mais il ne se passe rien :

    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
    package r1bellu2b.norecoil;
     
     
    import org.jnativehook.keyboard.NativeKeyEvent;
    import org.jnativehook.keyboard.NativeKeyListener;
     
     
    import javax.swing.*;
     
    import static com.sun.deploy.uitoolkit.ToolkitStore.dispose;
    import static com.sun.glass.ui.Cursor.setVisible;
    import static java.awt.Frame.*;
     
     
     
     
     
        public class Test implements NativeKeyListener {
     
            public void nativeKeyTyped(NativeKeyEvent e) {
            }
        public void nativeKeyPressed(NativeKeyEvent e) {
    JFrame f = new JFrame();
      if (e.getKeyCode() == NativeKeyEvent.VC_F4) {
            //if the JFrame has Title bar
            if (f.isUndecorated()) {
                //this will dispose your JFrame
                f.dispose();
                //here to set it with no Title bar
                f.setUndecorated(false);
     
                f.setLocationRelativeTo(null);
                //as you dispose your JFrame, you have to remake it Visible..
                setVisible(true);
            } else {
                f.dispose();
                f.setUndecorated(true);
                f.setExtendedState(MAXIMIZED_BOTH);
                setVisible(true);
            }
        }
     
    }
            public void nativeKeyReleased(NativeKeyEvent e) {
        }
    }

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    setUndecorated() ne fonctionne que lorsque la fenêtre n'est pas encore affichée. Tu peux toujours disposer la JFrame, modifier l'état, et réafficher, mais tu auras un effet plus ou moins visible. Sinon une solution serait de simuler l'affichage de bordures et autres décoration sur une fenêtre qui reste non décorée, et basculer entre les deux états seraient afficher ou non cette fausse bordure.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par R1beLlu2B Voir le message
    J'ai teste de faire ca mais il ne se passe rien :
    Bah, forcément, là tu crées une nouvelle instance de JFrame que tu disposes avant même de l'afficher. Elle a systématiquement un état decorated par defaut, et changer son état n'a aucun effet. Il faut bien sûr traiter l'instance de la JFrame pour laquelle tu veux changer l'état (comme je vois un setVisible(true) dans ton code, je suppose que la méthode est dans une classe qui étend JFrame, donc ça pourrait être simplement this.

    Un exemple :
    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
    import java.awt.GridBagLayout;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Demo {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		JButton button = new JButton("Supprimer dérocations");
    		button.addActionListener(e -> toggleDecorations(frame, button));
    		panel.add(button);
     
    		frame.add(panel);
     
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static void toggleDecorations(JFrame frame, JButton button) {
    		frame.dispose();
    		frame.setUndecorated(!frame.isUndecorated());
    		if (frame.isUndecorated()) {
    			button.setText("Afficher décorations");
    		} else {
    			button.setText("Supprimer décorations");
    		}
    		frame.setVisible(true);
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    D'accord,

    je n'es pas tres bien compris le "simuler" mais je vais faire des recherche.

    Par contre,

    est ce que je peu faire ceci :

    créer ma JFrame sans bordure ni fond,

    Créér un JPanel ou je met mon image de fond

    et par dessus Créer un JComponent ou je met mes infos

    Apres je n'es qu'a desactive le Jpanel...

    enfin dans l'idée..


    merci*
    Fred

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par R1beLlu2B Voir le message
    je n'es pas tres bien compris le "simuler" mais je vais faire des recherche.
    Je parlais de le "dessiner" toi-même, ressemblant à ce que l'environnement graphique dessine.

    Citation Envoyé par R1beLlu2B Voir le message
    est ce que je peu faire ceci :

    créer ma JFrame sans bordure ni fond,

    Créér un JPanel ou je met mon image de fond

    et par dessus Créer un JComponent ou je met mes infos

    Apres je n'es qu'a desactive le Jpanel...
    Oui, plus ou moins, sans bordure (sans fond, c'est plus compliqué). Moi je parlais d'utiliser un Border sur le JPanel, et qui se désactive ou se réactive très facilement, ce qui évite de pratiquer de l'overlay de composants (qui fonctionne plus ou moins bien avec des composants d'ui) .
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    J'ai réussi à faire pas mal de choses. J'ai mis deux carrés superposés (l'un en un peu plus grand que l'autre) et ça me fait un fond avec une bordure. J'ai également rendu l'ensemble déplaçable sur tout le bureau sans la JFrame. Maintenant ça se complique , inclure un bouton (ça on dira assez facile). Mais je souhaiterai que ce bouton m'enlève c.est deux carrés (qui fond mon fond et bordure) pour ne rien avoir derrière.

    J'ai compris que je vais devoir mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static boolean Modesansfond = true
    Mais après je ne comprends pas trop comment faire pour la suite. J'ai regardé des exemples et fait des tests mais il ne se passe rien.

    Merci

    Fred

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Sans le code qui me permet de savoir comment tu as superposé les deux composants, il m'est impossible de te guider (il y a différentes façons de le faire).

    Voici mon exemple (vite fait juste pour l'exemple), avec Border :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Area;
    import java.awt.geom.Rectangle2D;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.Border;
     
    public class FrameBorder implements Border {
     
    	private String title;
    	public FrameBorder() {
    	}
    	public FrameBorder(String title) {
    		this.title=title;
    	}
     
    	public void registerFrame(JPanel panel, JFrame frame) {
    		MouseAdapter mouseAdapter = new MouseAdapter() {
    			private boolean drag;
    			private Point location;
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				if ( panel.getBorder()==FrameBorder.this && inButton(panel, e.getPoint())) {
    					frame.dispose();
    				}
    			}
    			@Override
    			public void mousePressed(MouseEvent e) {
    				if ( panel.getBorder()==FrameBorder.this && inTitleBar(panel, e.getPoint())) {
    					drag=true;
    					location = e.getPoint();
    				}
    			}
     
    			@Override
    			public void mouseMoved(MouseEvent e) {
    				panel.repaint();
    			}
     
    			@Override
    			public void mouseDragged(MouseEvent e) {
    				if ( drag ) {
    					if ( panel.getBorder()==FrameBorder.this ) {
    						//if ( inTitleBar(panel, e.getPoint()) ) {
    							frame.setLocation(frame.getX()+e.getX()-location.x, frame.getY()+e.getY()-location.y);
    						//}
    					}
    					else {
    						drag=false;
    					}
    				}
    			}
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				drag=false;
    			}
    		};
    		panel.addMouseListener(mouseAdapter);
    		panel.addMouseMotionListener(mouseAdapter);
    	}
     
    	public void setTitle(String title) {
    		this.title=title;
    	}
     
    	@Override
    	public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
    		Graphics2D g2d = (Graphics2D) g.create(x, y, width, height);
    		Rectangle componentBounds = new Rectangle(x,y,width,height);
    		Insets insets = getBorderInsets(c);
    		Rectangle innerBounds = new Rectangle(x+insets.left,y+insets.top,width-insets.left-insets.right,height-insets.top-insets.bottom);
    		Area area = new Area(componentBounds);
    		area.subtract(new Area(innerBounds));
    		g2d.setClip(area);
    		g2d.setPaint(Color.CYAN);
    		g2d.fillRect(x, y, width-1, height-1);;
    		g2d.setPaint(Color.GRAY);
    		g2d.drawRect(x, y, width-1, height-1);
    		g2d.drawRect(innerBounds.x-1, innerBounds.y-1, innerBounds.width+1, innerBounds.height+1);
     
    		if ( title!=null ) {
    			g2d.setPaint(Color.BLACK);
    			g2d.setFont(new Font("Arial",Font.BOLD,12));
    			FontMetrics fm = g2d.getFontMetrics();
    			Rectangle2D stringBounds = fm.getStringBounds(title, g2d);
    			if ( stringBounds.getWidth()>width-80 ) {
    				stringBounds.setFrame(32, 15-stringBounds.getHeight()/2, width-80, stringBounds.getHeight()+4);
    				g2d.clip(stringBounds);
    			}
    			else {
    				stringBounds.setFrame(32, 15-stringBounds.getHeight()/2, stringBounds.getWidth()+4, stringBounds.getHeight()+4);
    			}
    			g2d.drawString(title, 34, 16+(fm.getAscent()-fm.getDescent())/2);
    			area.subtract(new Area(stringBounds));
    			g2d.setClip(area);
    		}
    		g2d.setPaint(Color.GRAY);
    		for(int i=5; i<28; i+=3) {
    			g2d.drawLine(3, i, width-6-32, i);
    		}
    		g2d.drawRect(width-32, 3, 25, 25);
     
    		Area cross = new Area(new Rectangle(width-22,5,5,21));
    		cross.add(new Area(new Rectangle(width-30,13,21,5)));
    		AffineTransform af=AffineTransform.getRotateInstance(Math.PI/4, width-19.5, 15.5);
    		af.translate(0.5, 0);
    		cross = cross.createTransformedArea(af);
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    		if ( c.getMousePosition()!=null && inButton(c,c.getMousePosition()) ) { 
    			g2d.fill(cross);
    		}
    		g2d.draw(cross);
     
    		g2d.dispose();
    	}
     
    	public boolean inTitleBar(Component c, Point p) {
    		if (p==null ) return false;
    		return new Rectangle(0,0,c.getWidth(),32).contains(p) && !inButton(c, p);
    	}
    	public boolean inButton(Component c, Point p) {
    		if (p==null ) return false;
    		return new Rectangle(c.getWidth()-32, 3, 25, 25).contains(p);
    	}
     
    	@Override
    	public Insets getBorderInsets(Component c) {
    		return new Insets(32,4,4,4);
    	}
     
    	@Override
    	public boolean isBorderOpaque() {
    		return true;
    	}
     
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setUndecorated(true);
     
    		FrameBorder frameBorder = new FrameBorder("Démo");
     
    		JPanel panel = new JPanel(new GridBagLayout());
    		panel.setBorder(frameBorder);
     
    		JButton button = new JButton("Supprimer dérocations");
    		button.addActionListener(e -> toggleDecorations(panel, button, frameBorder));
    		panel.add(button);
     
    		frame.add(panel);
     
    		frameBorder.registerFrame(panel, frame);
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static void toggleDecorations(JPanel panel, JButton button, Border border) {
    		Border currentBorder = panel.getBorder();
    		if (currentBorder==null) {
    			panel.setBorder(border);
    			button.setText("Supprimer décorations");
    		} else {
    			panel.setBorder(null);
    			button.setText("Afficher décorations");
    		}
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Oui pardon,

    avec le code c'est mieux :

    le Main

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    package r1bellu2b.norecoil;
     
     
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import org.jnativehook.GlobalScreen;
    import org.jnativehook.NativeHookException;
    import java.awt.Color;
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
     
     
     
     
     
     
     
     
    public class Main extends JFrame {
     
        static final String CONFIG_DIR = "configs/";
        static final String DEFAULT_CONFIG = CONFIG_DIR + "AKM.json";
        public static boolean rightClick;
        static boolean enabled = true;
        static boolean shooting = false;
        static boolean zoom = false;
     
        static Gson gson = new GsonBuilder().setPrettyPrinting().create();
     
     
        private int posX = 0;   //Position X de la souris au clic
        private int posY = 0;   //Position Y de la souris au clic
     
        public Main() throws IOException {
            setLocationRelativeTo(null);
            setUndecorated(false);
            setSize(600, 310);
     
     
     
     
      //    String path = "src/images/ribellu.jpg";
        //   BufferedImage image = ImageIO.read(new File(path));
     //     Action action = new Action(image);
     
     
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Action action = new Action();
            setContentPane(action);
            //   setExtendedState(JFrame.MAXIMIZED_BOTH);
     
            //    f.setSize(600, 310);
            setIconImage(new ImageIcon("src/images/icone.gif").getImage());
            setTitle("NoRecoil By R1beLlu");
            setLocationRelativeTo(null);
            setAlwaysOnTop(true);
            setResizable(false);
     
            setUndecorated(true);
            setBackground(new Color(0, 0, 0, 0));
     
            setVisible(true);
     
            MouseListener.executorService.execute(() -> {
                while (!MouseListener.executorService.isShutdown()) {
                  action.repaint();
                    try {
                        Thread.sleep(50);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
     
            try {
                setupConfigs();
                setupEvents();
            } catch (NativeHookException ex) {
                System.exit(1);
            }
     
     
     
     
     
     
     
            addMouseListener(new MouseAdapter() {
                @Override
                //on recupere les coordonnées de la souris
                public void mousePressed(MouseEvent e) {
                    posX = e.getX();    //Position X de la souris au clic
                    posY = e.getY();    //Position Y de la souris au clic
                }
            });
     
            addMouseMotionListener(new MouseMotionAdapter() {
                // A chaque deplacement on recalcul le positionnement de la fenetre
                @Override
                public void mouseDragged(MouseEvent e) {
                    int depX = e.getX() - posX;
                    int depY = e.getY() - posY;
                    setLocation(getX()+depX, getY()+depY);
                }
            });
        }
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        new Main().setVisible(true);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
     
        }
     
     
        private static void setupEvents() throws NativeHookException {
            Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
            logger.setLevel(Level.SEVERE);
            logger.setUseParentHandlers(false);
            GlobalScreen.registerNativeHook();
            KeyBoardListener keyBoardListener = new KeyBoardListener();
            GlobalScreen.addNativeKeyListener(keyBoardListener);
            MouseListener mouseListener = new MouseListener();
            GlobalScreen.addNativeMouseListener(mouseListener);
            GlobalScreen.addNativeMouseMotionListener(mouseListener);
        }
     
        private static void setupConfigs() {
            MouseListener.executorService.execute(() -> {
                try {
                    if (new File(CONFIG_DIR).mkdir()) {
                    }
                    File file = new File(DEFAULT_CONFIG);
                    if (!file.exists()) {
                        FileWriter fileWriter = new FileWriter(file);
                        gson.toJson(new Config(), fileWriter);
                        fileWriter.close();
                    }
                    ConfigManager.getInstance().readConfigs();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
     
    }

    et le Action


    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    package r1bellu2b.norecoil;
     
    import javax.swing.*;
     
    import java.awt.*;
    import java.awt.image.BufferedImage;
     
     
     
    public class Action extends JComponent {
     
     //  BufferedImage image;
    //  public Action(BufferedImage image) {
      //     this.image = image;
     
     
     
    //    }
     
        Font myFont = new Font("Serif", Font.BOLD, 30);
        Font myFont1 = new Font("Arial arrondi MT Bold", Font.BOLD, 10);
     
        public Action() {
     
        }
     
     
        @Override
     
        protected void paintComponent (Graphics g){
            super.paintComponent(g);
            if (g instanceof Graphics2D) {
     
     
        //        int x = (getWidth() - image.getWidth()) / 2;
         //       int y = (getHeight() - image.getHeight()) / 2;
        //        g.drawImage(image, x, y, this);
     
     
                Color c = g.getColor();
                g.setColor(Color.RED);
                g.fillRect(0,0,600,310);
                g.fillRect(0,0,50,50);
     
                g.setColor(Color.black);
                g.fillRect(10,10,580,290);
                g.fillRect(10,10,30,30);
                g.setColor(c);
     
     
     
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
     
                g2.setFont(myFont);
                g2.setColor(new Color(225,96,0));
                g2.drawString("NoRecoil:", 50, 70);
                g2.setColor(Main.enabled ? Color.WHITE : Color.WHITE);
                g2.drawString(Main.enabled ? "Activé" : "Désactivé", 225, 70);
                g2.setColor(new Color(225,96,0));
                g2.drawString("Viseur:", 50, 140);
                g2.setColor(Main.zoom ? Color.GREEN : Color.GREEN);
                g2.drawString(Main.zoom ? "ACOG" : "Red Dot" , 227, 140);
                g2.setColor(new Color(225,96,0));
                g2.drawString("Arme:", 50, 215);
                g2.setColor(new Color(128,150,255));
                g2.drawString(ConfigManager.getInstance().getCurrentConfig().name, 230, 215);
     
                g2.setFont(myFont1);
                g2.setColor(Color.WHITE);
                g2.drawString("-F12 To Quit", 10, 265);
                g2.setColor(Color.WHITE);
                g2.drawString("-F11 To Pause", 85, 265);
                g2.setColor(Color.WHITE);
                g2.drawString("-F7 : Viseur",170, 265 );
                g2.setColor(Color.WHITE);
                g2.drawString("-F8 : Arme",240, 265 );
     
     
     
     
            }
        }
     
     
     
    }

    J'ai pas nettoyé le code encore ni remplace tout les termes car j'ai une autre grosse modification a faire mais c'est une autre histoire.


    merci

    Fred

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2008, 21h58
  2. [PB 10.5] Afficher une image dans une fenêtre
    Par cagoule dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 27/02/2007, 23h22
  3. Réponses: 4
    Dernier message: 26/01/2007, 08h39
  4. Afficher un shell dans une fenêtre wxWidget
    Par BlueCat dans le forum wxWidgets
    Réponses: 3
    Dernier message: 05/09/2006, 23h38
  5. afficher une image dans une fenêtre windows
    Par yashiro dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 02/05/2006, 17h30

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