[Débutant] passer une variable exterieure dans un objet graphique
1 réponse
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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é).
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é).