[Débutant inside] Choisir x et y en écrivant dans un Componant

Choisir x et y en écrivant dans un Componant [Débutant inside] - Java - Programmation

Marsh Posté le 16-12-2003 à 17:23:34    

Salut, je cherche à écrire du texte à des coordonnées précises dans n'importe quel componant, ex un label. En fait c'est pour faire défiler un texte dans une frame qui contient d'autres éléments.
 
Si c'était une applet, je ferais  
 

Code :
  1. public class test extends Applet {
  2.   ...
  3.   public void paint (Graphcis g) {
  4.     ...
  5.     g.drawString (message, x, y);
  6.     ...
  7.   }
  8.   ...
  9. }


 
mais là je veux faire un truc plutôt comme :  

Code :
  1. public class test {
  2.   public test () {
  3.     Frame maFrame = new Frame ();
  4.     Panel monPanel = new Panel ();
  5.     monPanel.getGraphics().drawString (msg, x, y);
  6.     maFrame.add (monPanel);
  7.    
  8.     ...
  9.   }
  10. }


 
Mais ça va pas, il me dit  
Exception in thread "main" java.lang.NullPointerException
        at test.<init>(test.java:11)
        at test.main(test.java:20)
 
au moment de l'éxecution, la ligne 11 étant bien sûr monPanel.getGraphics().drawString (msg, x, y);
 
Voilà, pouvez-vous m'aider ?

Reply

Marsh Posté le 16-12-2003 à 17:23:34   

Reply

Marsh Posté le 16-12-2003 à 17:46:29    

tu sais ce que ça veut dire "NullPointerException" ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 16-12-2003 à 18:08:34    

Euh... [Débutant inside] <= :D
 
Ca veut dire qu'on essaye d'utiliser une variable pour laquelle on n'a pas alloué d'espace mémoire, c'est ça ?
 
(Cent ans après...) En fait ça y'est j'y suis, hier j'avais essayé de faire  

Code :
  1. Graphics g = new Graphics ();
  2. g = monPanel.getGraphics ();
  3. g.drawString ("phrase de test", 0, 0);


 
mais il me dit : java.awt.Graphics is abstract; cannot be instantiated
 
voilà et c'est à cause de ça que je me demandais comment écrire dans un componant, parce qu'avec une applet on se sert de la variable Graphics uniquement (enfin à ce que j'ai vu) dans la fonction paint (Graphics g), où là bien sûr on n'a pas à initialiser la variable Graphics.
 
Merci pour ton aide en tout cas.

Reply

Marsh Posté le 16-12-2003 à 18:13:37    

FrigoAcide a écrit :

Euh... [Débutant inside] <= :D
 
Ca veut dire qu'on essaye d'utiliser une variable pour laquelle on n'a pas alloué d'espace mémoire, c'est ça ?
 
(Cent ans après...) En fait ça y'est j'y suis, hier j'avais essayé de faire  

Code :
  1. Graphics g = new Graphics ();
  2. g = monPanel.getGraphics ();
  3. g.drawString ("phrase de test", 0, 0);


 
mais il me dit : java.awt.Graphics is abstract; cannot be instantiated
 
voilà et c'est à cause de ça que je me demandais comment écrire dans un componant, parce qu'avec une applet on se sert de la variable Graphics uniquement (enfin à ce que j'ai vu) dans la fonction paint (Graphics g), où là bien sûr on n'a pas à initialiser la variable Graphics.
 
Merci pour ton aide en tout cas.

Non, c'est pas ça. Il faut d'abord essayer de comprendre ce que représente un objet de la classe Graphics. Je sais pas trop comment expliquer, en prog windows c'est un peu l'équivalent du DeviceContext ; en gros ca représente le prériphérique chargé de l'affichage, ici ton écran (en TRES gros).
Enfin tout ça pour dire que l'objet renvoyé par getGraphics() ne sera pas valide si l'objet sur lequel tu appelles la méthode n'est pas visible à l'écan.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-12-2003 à 18:14:25    

Graphics est abstract, tu ne peux pas écrire "new Graphics()".


---------------
Le site de ma maman
Reply

Marsh Posté le 16-12-2003 à 18:15:17    

Et puis passe par un label, qu'est ce que tu t'emmerdes avec drawString().
 
EDIT : 2500ème post, R3g. [:kadreg]


Message édité par Cherrytree le 16-12-2003 à 18:16:54

---------------
Le site de ma maman
Reply

Marsh Posté le 16-12-2003 à 18:51:24    

Cherrytree a écrit :

Et puis passe par un label, qu'est ce que tu t'emmerdes avec drawString().
 
EDIT : 2500ème post, R3g. [:kadreg]


 
OK, mais je veux décider à quelle coordonnée x je veux placer mon texte, et tout ce que j'ai trouvé pour le label, c'est un argument qui permet d'alligner le texte (gauche, centre, droit), pas assez précis pour ce que je veux faire donc...
 
Y'a pas un component qui existe, et qui me permette de faire ce que je veux ?

Reply

Marsh Posté le 16-12-2003 à 19:03:23    

FrigoAcide a écrit :


 
OK, mais je veux décider à quelle coordonnée x je veux placer mon texte, et tout ce que j'ai trouvé pour le label, c'est un argument qui permet d'alligner le texte (gauche, centre, droit), pas assez précis pour ce que je veux faire donc...
 
Y'a pas un component qui existe, et qui me permette de faire ce que je veux ?

Canvas est fait pour ça. Et tu était sur la bonne voie, c'est juste que tu dois d'abord afficher ton composant avant d'appeler getGraphics()

Citation :

public Graphics getGraphics()Creates a graphics context for this component. This method will return null if this component is currently not displayable.


 
Cherrytree >  :bounce: je regarde jamais le nombre de posts, j'avais pas vu


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-12-2003 à 19:04:32    

Le truc entre [ ] dans le titre c'est le langage en général hein :o Le fait que tu dois débutant on s'en fout :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-12-2003 à 19:13:13    

R3g a écrit :

Canvas est fait pour ça. Et tu était sur la bonne voie, c'est juste que tu dois d'abord afficher ton composant avant d'appeler getGraphics()

Citation :

public Graphics getGraphics()Creates a graphics context for this component. This method will return null if this component is currently not displayable.


 
Cherrytree >  :bounce: je regarde jamais le nombre de posts, j'avais pas vu


 
En effet je viens de m'en rendre compte. Je peux faire monPanel.getGraphics ().drawString ("phrase de test", 100, 100); après l'affichage de ma frame, mais j'obtiens aucun résultat.
 
Sinon je vais essayer Canvas, merci.
 

Citation :

Le truc entre [ ] dans le titre c'est le langage en général hein :o Le fait que tu dois débutant on s'en fout :o


 
Clair j'ai même pas précisé que c'était en java, dsl.

Reply

Marsh Posté le 16-12-2003 à 19:13:13   

Reply

Marsh Posté le 18-12-2003 à 14:32:50    

Sinon, une solution (qui n'est pas génial) pour mettre un composant à l'aide de ces coordonnées cartésiennes est d'annulée le Layout par défaut de ton panel ou de ta fenêtre
(setLayout(null);)
Sinon, le Canevas est la meilleur solution. Ainsi, tu pourras le réutiliser ailleurs

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed