Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Débutant] passer une variable exterieure dans un objet graphique

1 réponse
Avatar
Joe le Bonka
Bonsoir à Tous.
Je progresse petit à petit en Java ...

Aujourd'hui, mon soucis est de dessiner dans une fenêtre des points suivant
un certain nombre de coordonnées. Ces coordonées sont stockées dans mon
programme principal dans un tableau xy[] d'entiers.
Je découvre les objets graphiques, et donc j'en ai crée un appelé
'Affichage' :

public static class affichage extends Frame
{
public affichage()
{
setBounds(0, 0, 640, 480); // Il me crée une fenêtre de 640 * 480
setVisible(true);
}

public void paint(Graphics g)
{
g.drawString("Hello",320,200);
}


Dans mon Main, j'appelle donc mon objet graphique :
fenetre=new affichage();

Par contre, je n'arrive pas à utiliser dans le public void paint(Graphics g)
de variables exterieures à la classe affichage : impossible de passer quoi
que ce soit en paramètres, je n'ai que des messages d'erreur.

Comment fait-on pour pouvoir utiliser des variables exterieures à
l'intérieur de l'objet affichage() ?
Merci de vos éclaircissements.

1 réponse

Avatar
BJB
Bonjour à toi :)

Joe le Bonka wrote:
Bonsoir à Tous.
Je progresse petit à petit en Java ...


Il y a toujours un début à toute les bonnes choses ;-)

Aujourd'hui, mon soucis est de dessiner dans une fenêtre des points suivant
un certain nombre de coordonnées. Ces coordonées sont stockées dans mon
programme principal dans un tableau xy[] d'entiers.
Je découvre les objets graphiques, et donc j'en ai crée un appelé
'Affichage' :


Comme tu débutes, je vais te commenter ton code en fonction de tout ce
qu'on peut amméliorer (et surtout le pourquoi).

public static class affichage extends Frame


En premier, selon la notation standardisé Java, une classe commence
toujours par une majuscule, et donc il fautdrait écrire "Affichage" (et
non pas "affichage"). Celà permet de reconnaitre facilement une classe
dans un code dont on a peu de compréhension (lors du débug d'un code que
l'on a pas écrit par exemple)... il existe plein d'autres règles du
style qu'il convient de suivre pour son propre bien (et celui des
autres). Un peu "lourd" quand on début, mais un vrai régal quand on y
est coutumié.

{


De la même façon les accolades ouvrantes se mettent à la fin de la ligne
précédente... pour des raisons de clarté.

public affichage()


Le nom du constructeur étant le même que le nom de la classe on aurra
donc un nom qui sera "Affichage" ...

{
setBounds(0, 0, 640, 480); // Il me crée une fenêtre de 640 * 480
setVisible(true);
}


En générale, on ne met pas des tailles et on ne force pas un composant à
s'afficher DANS sa propre classe (et à plus forte raison dans son
constructeur par défaut), car si un jour tu souhaite charger d'abord le
contenu du Frame, et aficher un écran d'attente, ça te bloquerait ton
thread :(

public void paint(Graphics g)
{
g.drawString("Hello",320,200);


Là c'est une autre histoire, si tu veux "déssiner", je te conseille de
dériver ta classe de l'objet Canvas et de l'ajouter dans un Frame (au
centre par exemple), et si tu es dans un Java récent (1.2+=, utilise
plutot les Swings et le fameux Graphics2D. Il te permetra de faire
toutes les fantaisies que tu as en tête...

A noter que dans les swing, il vaut mieux surcharger le paintComponent
si ma mémoire est bonne.

}


Dans mon Main, j'appelle donc mon objet graphique :
fenetre=new affichage();


Ici, tu peux y transferrer ton dimensionement et l'affichage ;-)


Par contre, je n'arrive pas à utiliser dans le public void paint(Graphics g)
de variables exterieures à la classe affichage : impossible de passer quoi
que ce soit en paramètres, je n'ai que des messages d'erreur.
Comment fait-on pour pouvoir utiliser des variables exterieures à
l'intérieur de l'objet affichage() ?
Merci de vos éclaircissements.


Sur ton composant affichage tu va créer des propriétés JavaBean (je te
conseille de lire sur le sujet un peu, c'est relativement simple), puis
tu l'affectera depuis le main avec son setter et récupérera sa valeur
dans le paintComponent ....

Attention, à ne pas oublier de traiter correctement les cas par défauts
(càd les cas ou aucune propriété n'a encore été affecté).


Bonne chance.

A+
JB