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

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

AWT/Swing Java Discussion :

Probleme de communication entre mon bouton et mon painComponent()


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Probleme de communication entre mon bouton et mon painComponent()
    Bonjour je débute en JAVA grace à ce site et à divers support. Ayant d'abord programmé en C je me trouve un peu dérouté par l'approche de l'orienté objet et je comprend que mon probleme vient certainement d'une mauvaise compréhension du fonctionnement de la méthode paintComponent ou quelque chose du genre mais voilà mon problème est que :

    je veux assigner la tâche dans une méthode ActionPerformed() de redessiner l'intérieur d'un JPanel avec une image donnée jai donc créé un setter vers une image déclaré dans le constructeur par défault puis dans mon paintComponent je fais mon graphics.drawImage avec l'image par défault.
    Et lorsque j'effectus un "jpanel.setImage(nouvelleImage)" mon image ne change pas dans mon jpanel alors que je pensais que paincomponent serait rappeler automatiquement.
    J'ai alors essayer de rajouter la méthode repaint() mais que néni. Votre lumière est la bienvenue sur mon humble demeure...

    j'ai trifouillé un peu dans le forum à la recherche d'une solution à mon probleme mais je pense que mon probleme encore une fois vient de ma non-compréhension du fonctionnement d'un composant ou d'une méthode et donc une explication pourrait me faire mieux comprendre la situation ..


    je joins les codes :


    Ma classe fenetre:
    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
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
     
     
    public class WindowJTY extends JFrame{
     
        JPanel north = new JPanel();
        JPanel west = new JPanel();
        JPanel south = new JPanel();
        Panneau center = new Panneau();
     
        JButton boutonLeft = new JButton("<==");
        JButton boutonRight = new JButton("==>");
        JButton boutonPlus = new JButton("+");
     
        JPanel contain = new JPanel();
     
     
        public WindowJTY(){
              this.setTitle("Test");
              this.setSize(800, 600);
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              this.setLocationRelativeTo(null);
     
              north.setBackground(Color.black);
              north.setPreferredSize(new Dimension(75,75));
              west.setBackground(Color.green);
              west.setPreferredSize(new Dimension(75,75));
              south.setBackground(Color.black);
              south.setPreferredSize(new Dimension(75,75));
              south.add(boutonLeft);
              south.add(boutonPlus);
              south.add(boutonRight);
     
              boutonLeft.addActionListener(new BoutonListenerLeft());
              boutonRight.addActionListener(new BoutonListenerRight());
     
              contain.setLayout(new BorderLayout());
              contain.add(north, BorderLayout.NORTH);
              contain.add(west, BorderLayout.WEST);
              contain.add(south, BorderLayout.SOUTH);
              contain.add(center, BorderLayout.CENTER);
     
     
              this.setContentPane(contain);
              this.setVisible(true);
     
     
     
        }
     
     
        public class BoutonListenerLeft implements ActionListener{
            public void actionPerformed(ActionEvent arg0){
                Image map4 = null;
                try {
                    map4 = ImageIO.read(new File("map4.bmp"));
                } catch (IOException e) {
     
                    e.printStackTrace();
                }
     
                center.setImg(map4);
                center.repaint();
                contain.repaint();
            }
     
        }
     
        public class BoutonListenerRight implements ActionListener{
            public void actionPerformed(ActionEvent arg0){
                Image map3 = null;
                try {
                    map3 = ImageIO.read(new File("map3.bmp"));
                } catch (IOException e) {
     
                    e.printStackTrace();
                }
     
                center.setImg(map3);
                center.repaint();
                contain.repaint();
            }
        }
    }
    Ma classe panneau:

    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
     
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
     
    public class Panneau extends JPanel{
     
     
        protected Image img;
     
     
     
        public Image getImg() {
            return img;
        }
     
     
     
        public void setImg(Image img) {
            this.img = img;
        }
     
     
     
        public void paintComponent(Graphics g) {
     
            try {
                img = ImageIO.read(new File("map3"));
     
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
     
            g.drawImage(img,  0, 0, this);
     
     
     
        }
     
     
     
     
     
     
    }

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Conseil qui va à la fois régler ton problème et améliorer la performance te ton composant: Il ne faut jamais effectuer d'opération de lecture de flux ou de fichier dans le code de dessin d'un composant, en effet ces lectures sur flux ou fichiers sont des opérations lourdes et vont de fait bloquer le rendu de ton application.

    Et puis accessoirement, l'ImageIO.read qui doit être donc viré de ton paintComponent, pointe sur une image en dur et est appelé à chaque repaint...

    (ps: évite les pièces jointes, prends plutôt l'habitude d'isoler la portion de code posant le problème et de la poster entre des balises code)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 3
    Points
    3
    Par défaut merci
    en effet merci Sinok, j'ai bien compris la source de mon probleme et j'ai donc initialisé mon image dans le constructeur de la fenetre puis je n'ai laissé que g.drawImage(img) dans mon paintComponent et celà coule de source sinon à chaque appel de la méthode paintComponent il aurait été relu imageIO.read .

    Merci bien de ton aide ...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/03/2012, 17h10
  2. Réponses: 1
    Dernier message: 02/02/2009, 11h24
  3. probleme de communication entre 2 fenêtres windev
    Par law56100 dans le forum WinDev
    Réponses: 9
    Dernier message: 24/04/2008, 12h14
  4. [CSS] Modifier la taille de mon image pour mon bouton
    Par bouchette63 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 11/08/2006, 10h15
  5. Réponses: 8
    Dernier message: 15/05/2006, 15h54

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