TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
Le problème de ce sujet a été résolu
| Page : 1 | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |
| Page : 1 | |
Raton
|
# Posté le 31/01/2006 à 18:49:12 |
![]() Groupe : Membres |
Bonjour à tous,
Je fais du Java depuis quelques mois maintenant mais je profite de cette semaine de congé pour approfondir ma connaissance du Java en tentant de comprendre comment implanter des images dans mes programmes Java et autres fonctionnalités de dessin à la souris.
Dans ce que j'ai esasyé, j'ai voulu représenter un jeu avec une carte et un personnage dans le PanneauET. J'ai donc créé une fenêtre avec une barre de menus et deux panels: PanneauMenu et PanneauET (ET pour Espace de Travail). Jusque là, niquel. Seulement, je voudrais pouvoir mettre des images ou dessiner dans le panel PanneauET. J'ai donc essayé ça: Code : Java import java.awt.*;
import java.awt.event.*; public class Helium { public static void main(String args[]) { Helium H=new Helium();//le main lance l'objet Helium } public Helium()//constructeur d'Helium { Frame Lafenetre=new Frame("Projet Helium");//on créée une nouvelle fenêtre (Frame Lafenetre) avec le titre du projet en paramètre Lafenetre.setSize(1200,900);//donne la taille de Lafenetre Lafenetre.setLocation(100,100);//donne la position de Lafenetre Lafenetre.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { System.exit(0); } });//permet de fermer Lafenetre en cliquant sur la croix sur fond rouge Lafenetre.setLayout(new BorderLayout());//Layout du type Border, qu'on subdivisera //Création des Panel PanneauMenu et PanneauET PanneauMenu Est=new PanneauMenu(); Lafenetre.add(Est,BorderLayout.EAST); Est.setSize(100,100); Est.setVisible(true); PanneauET Centre=new PanneauET();//création de deux panels pour séparer le menu (à l'est) de l'espace de travail (au centre) Lafenetre.add(Centre,BorderLayout.CENTER);//positionnement des 2 panels //création de la barre de menu MenuBar LaBarre = new MenuBar(); Menu programme = new Menu("Programme");//Un menu pour la gestion du programme en lui-même LaBarre.add(programme); Menu interactions = new Menu("Interactions");//un menu pour interagir dans le programme LaBarre.add(interactions); Menu aide = new Menu("Aide");//un menu proposant diverses aides LaBarre.add(aide); Lafenetre.setMenuBar(LaBarre);//installation de la barre MenuItem Quitter= new MenuItem("Quitter"); Quitter.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) {System.exit(0);}}); programme.add(Quitter); //J'appelle la fonction paint de Centre pour que des dessins soient faits dans Centre Centre.paint(Centre.getGraphics()/*leperso*/); <couleur nom="rouge">//ça foire à cet endroit</couleur> Lafenetre.setVisible(true);//Lafenetre doit s'afficher } } Ca, c'est la classe principale. J'ai placé les classes PanneauMenu et PanneauET dans des classes à part pour soulager un peu la classe principale (c'est déjà fort lourd comme ça )
Voici la classe PanneauET, les autres classes ne posant pas de problème: Code : Java import java.awt.*;
public class PanneauET extends Panel//extends JInternalFrame { private Image persoImage; PanneauET() { this.setBackground(java.awt.Color.gray); } public void paint(/*Personnage leperso*/Graphics g) { /*persoImage=leperso.getImage(); g.drawImage(persoImage,100,100,10,10,this);*/ <couleur nom="rouge">//mis en commentaire car ça foire</couleur> //g.drawLine(10,10,0,0); <couleur nom="rouge">//j'ai essayé ceci mais ça foire aussi</couleur> System.out.println(g.toString());<couleur nom="rouge">//même ça, ça foire</couleur> } } L'erreur renvoyé est celle-ci (sous Eclipse): Exception in thread "main" java.lang.NullPointerException at PanneauET.paint(PanneauET.java:18) at Helium.<init>(Helium.java:63) at Helium.main(Helium.java:9) Si je ne mets rien dans la méthode paint concernant le Graphics g, aucune erreur n'est affichée et tout se passe bien. Quelqu'un pourrait-il m'aider à résoudre ce petit problème s'il-vous-plaît? Les nombreux tutos que j'ai lu à ce sujet ne m'ont pas aidés car ils réexpliquent tous la même chose, mais ce n'est jamais ce que je cherche à savoir.
Merci d'avance à ceux qui prendront la peine!
Raton PS: Je suis honteux là: j'ai résolu mon propre problème.
J'ai trouvé en fait qu'en ne cherchant pas à appeler la péthode paint(Graphic g) depuis l'extérieur, tout se passe bien.
En virant la ligne "Centre.paint(Centre.getGraphics()/*leperso*/);" de la classe Helium, ça a fini par marcher. J'en déduis donc que la méthode paint() de toute classe est appelée automatiquement. (je le mets en gras pour que d'autres le voient rapidement s'ils ont le même problème que j'ai eu et s'ils parcourent ce forum) Une journée de recherche pour trouver ça.
Édité
le 31/01/2006 à 22:41:35
par Raton
|
Asgeir
|
# Posté le 02/02/2006 à 18:56:43 |
Canardesque![]() Groupe : Bannis |
Euh ... les <couleur = rouge> dans ton code c'est une rreur de Zér0c0de hein ?
Ensuite, saches qu'il est déontologiquement interdit d'appeler directement la méthode paint d'un quelquonque objet. Elle est appelée automatiquement pour le premier dessin de son objet ; si tu désires redessiner l'objet, tu appelles plutot la méthode repaint(). |
Raton
|
# Posté le 02/02/2006 à 22:14:05 |
![]() Groupe : Membres |
Les <couleur=rouge> sont en effet soit un petit foirage du Zérocode soit plus probablement une erreur de ma part. Je voulais simplement que les commentaires décrivant les endroits précis des problèmes apparaissent dans une couleur un peu plus prononcée que du gris. Tant pis...
Pour la suite de ton message, je t'avoue que je bidouille pour comprendre comment l'affichage de graphismes fonctionne. Pour mon problème, je n'avais d'ailleurs lu ça: Citation : Asgeir Elle est appelée automatiquement pour le premier dessin de son objet ; si tu désires redessiner l'objet, tu appelles plutot la méthode repaint(). sur aucun tuto . j'ai beaucoup appris par les tutoriels mais ce détail-là, je ne l'avais vu nulle part.
Dans la fin de mon message, tu pourras voir que j'ai rajouté un PS où je signale que j'ai viré cet appel de paint() pour que le dessin s'affiche. Merci d'avoir répondu à mon message, même si j'avais finalement trouvé moi-même comment le résoudre le bricoler pour qu'il fonctionne.
|
pierrot la lune
|
# Posté le 03/02/2006 à 08:53:27 |
serial nounours![]() Groupe : Membres |
fait deja ça
System.out.println(g); au lieu de ça System.out.println(g.toString()); car de toute maniere ce sera la methode toString qui sera appelé et au pire cela affichera null. pour l'appel de ta methode paint tu a inverser les parametres (perso puis G) et non l'inverse (o`---'o) | 0 o | (_(°)_) /.-. oO0.0Oo (.)^(.) |
Retour au forum "Langage Java" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
255 Zéros connectés |
7 requêtes |
0.1428s (0.1163s)
