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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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