Bouton marche pas clique java
Résolu
keurdange
Messages postés
816
Statut
Membre
-
keurdange Messages postés 816 Statut Membre -
keurdange Messages postés 816 Statut Membre -
Bonjour,
je voudrais dessiner une image quand on clique sur le bouton chp mais le probleme c'est que ca ne réagit pas. voici mon code:
chp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
int ha=rd.nextInt(listep.capacity());
class parrain extends JPanel
{
public void paintComponent(Graphics g)
{
File fichier=new File("C:/Users/Sylvestre/Pictures/Feu_1_.jpg");
try {
final Image moi1 = ImageIO.read(fichier);
g.drawImage(moi1, 0, 0, this.getWidth(), this.getHeight(), this);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
});
merci d'avance pour votre aide.
je voudrais dessiner une image quand on clique sur le bouton chp mais le probleme c'est que ca ne réagit pas. voici mon code:
chp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
int ha=rd.nextInt(listep.capacity());
class parrain extends JPanel
{
public void paintComponent(Graphics g)
{
File fichier=new File("C:/Users/Sylvestre/Pictures/Feu_1_.jpg");
try {
final Image moi1 = ImageIO.read(fichier);
g.drawImage(moi1, 0, 0, this.getWidth(), this.getHeight(), this);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
});
merci d'avance pour votre aide.
A voir également:
- Bouton marche pas clique java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
La seule véritable "erreur" que je vois c'est ton listep.capacity(), tu as certainement confondu avec listep.size(). Après avec un code partiel, il est impossible de tester et de voir s'il y a d'autres erreurs.
Remarque : à chaque fois que tu vas cliquer sur le bouton tu vas relire ton fichier. Il serait peut-être préférable de lire l'image une seule fois, soit au début de l'application, soit lors de la première utilisation de l'image. Ça évite d'avoir à lire plusieurs fois le fichier.
Ensuite, est-ce que tu crées vraiment une quadruple imbrication (paintComponent, dans la classe parrain, dans actionPerformed, dans l'implémentation de l'ActionListener de ta méthode addActionListener). D'accord c'est syntaxiquement correct, mais il y a surement moyen de faire autrement, à la compilation ça va donner un truc du genre toto$0$parrain.class ? C'est pas top je trouve...
Remarque : à chaque fois que tu vas cliquer sur le bouton tu vas relire ton fichier. Il serait peut-être préférable de lire l'image une seule fois, soit au début de l'application, soit lors de la première utilisation de l'image. Ça évite d'avoir à lire plusieurs fois le fichier.
Ensuite, est-ce que tu crées vraiment une quadruple imbrication (paintComponent, dans la classe parrain, dans actionPerformed, dans l'implémentation de l'ActionListener de ta méthode addActionListener). D'accord c'est syntaxiquement correct, mais il y a surement moyen de faire autrement, à la compilation ça va donner un truc du genre toto$0$parrain.class ? C'est pas top je trouve...
chp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
parrain pa=new parrain();
Graphics g;
pa.paintComponent(g, "C:/Users/Keurdange/Pictures/ucad.jpg");
}
});
public class parrain extends JPanel
{
public void paintComponent(Graphics g, String s)
{
File fichier= new File(s);
try {
final Image moi1 = ImageIO.read(fichier);
g.drawImage(moi1, 0, 0, this.getWidth(), this.getHeight(), this);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
mais le probleme, c'est que je dois initialiser la valeur de g dans mon ActionListener et je ne peux l'initialiser à null sinon je risque de générer une exception du genre NullPointerException. J'ai lu sur le net qu'on pouvait le faire avec this.getGraphics mais hélas non, ca marche pas avec moi.
J'ai pas testé, il y a peut-être des erreurs :
class parrain extends JPanel { private final Image img; // C'est ici que tu dois passer les paramètres, mais autant mettre directement l'image déjà chargée en mémoire plutôt que relire le fichier, ça ira plus vite public parrain(Image image) { img = image; } // En mettant Override, ton compilateur te dis tout de suite lorsque tu crées une méthode qui ne correspond pas à une redéfinition (avec ton String s par exemple) @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); } } public class Toto extends JFrame { // mettre moi1 dans le corps de la fenêtre évite de relire le fichier et recréer une nouvelle image à chaque fois que tu en as besoin. private final Image moi1; public Toto(String imageFileName) throws IOException { moi1 = ImageIO.read(new File(imageFileName)); chp.addActionListener(new ActionListener() { // mettre pa dans le corps de l'ActionListener évite de recréer un objet parrain à chaque nouvel appel de actionPerformed, tu en as un pour le bouton ça suffit private final parrain pa = new parrain(moi1); @Override public void actionPerformed(ActionEvent e) { // tu n'as pas à manipuler de Graphics g ici pa.repaint(); } }); } public static void main(String...args) { new Toto("C:/Users/Keurdange/Pictures/ucad.jpg"); } }