java JFrame graphiques
J'ai le code simple suivant dans une JFrame constructeur
super(name);
setBounds(0,0,1100,750);
setLayout(null);
setVisible(true);
g = this.getGraphics();
int[] x =new int[]{65, 122, 77, 20, };
int[] y =new int[]{226, 258, 341, 310};
g.setColor(Color.RED);
g.drawPolygon (x, y, x.length);
System.out.println(g);
- Je obtenir à la sortie de la console:
sun.java2d.SunGraphics2D[font=java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12],color=java.awt.Color[r=255,g=0,b=0]]
Mais pas de rouge polygone dessiné sur JFrame mais juste le vide JFrame.
Pourquoi ??
Ce n'est pas la bonne façon de dessiner sur une JFrame. Vous devez sous-classe Composite et remplacer
paintComponent(Graphics)
, et de faire de la peinture sur l'objet graphique y sont passés.OriginalL'auteur aditya parikh | 2012-10-25
Vous devez vous connecter pour publier un commentaire.
Ne pas remplacer
paint(..)
dansJFrame
Plutôt ajouter personnalisé
JPanel
avec substituéepaintComponent(Graphics g)
àJFrame
Ne pas utiliser
Null
/AbsoluteLayout
utiliser unLayoutManager
Ne pas appeler
setBounds(..)
surJFrame
instance (et non pas qu'il n'est pas permis, mais ne peux pas le voir être pertinents dans la présente demande)N'oubliez pas d'utiliser HAE pour créer et modifier les composants GUI:
vous serait alors de faire quelque chose comme ceci:
qui produit:
merci... Comme pour
setBounds(..)
je n'ai pas de preuves concrètes, mais je le vois comme une fusion desetSize()
etsetLocation()
. Je n'ai pas de problème avecsetLocation()
(outre le fait que le poste est peut-être hors de l'écran), maissetSize()
a connu des problèmes tels que les composants soient pas cachés dus à une erreur de taille donnée, etc, et la même chose peut se produire lors du réglage de la hauteur et de la largeur à l'aidesetBounds(x,y,width,height)
. Si je suis ouvert à la critique 🙂Personnellement, je n'ai pas de problème particulier, pack et setLocationRelativeXxx sont généralement plus utiles au jour le jour, à mon humble avis, bien que parfois nécessaire et souhaitable de spécifier l'emplacement de la taille directement. Il serait "décourager" l'utilisation de positionnement absolu de cette manière, sans bonne raison, mais c'est juste moi. Voulais juste avoir votre point de vue 😉
très vrai, et non pas un problème, j'ai édité le post pour montrer les changements et les OP et les autres puissent voir les commentaires
Hey, je suis l'ajout de l'image suivante dans le Composite msu-footprints.org/2011/Aditya/map.jpg puis en ajoutant polygone
int[] x = new int[]{65, 122, 77, 20}; int[] y = new int[]{226, 258, 341, 310}; g.setColor(Color.RED); g.drawPolygon(x, y, x.length);
Le polygone doit coïncider avec la construction de GER, mais est un peu en décalage. Mon proff dit les coordonnées sont d'accord. Il n'y a rien de mal avec la façon dont j'ai mis la position de l'image.OriginalL'auteur David Kroukamp
Vous devriez mieux remplacer
paint(Graphics g)
oupaintComponent(Graphics g)
que l'approche que vous essayez. Ajoutez les lignes ci-dessous et supprimer les lignes qui suiventsetVisible
dans votre code.Mais la peinture de la méthode s'exécute à commencer automatiquement. Je veux par programmation à décider de la date de tirage.
Ensuite, mettre un drapeau et en tirer les choses en vertu de la peinture uniquement lorsque le drapeau décide que.
Vous ne devriez vraiment pas remplacer un haut niveau de conteneurs méthode de peinture. En dehors de toute autre chose, il n'est pas double tampon, il est préférable de remplacer quelque chose qui s'étend de JComponent
C'est vrai. Cependant, j'ai montré où la mauvaise partie est. Les choses peuvent certainement être améliorées à partir de ce point.
OriginalL'auteur Dan D.