Java: à l'Aide de graphiques composant à l'intérieur d'un ActionListener
J'ai deux classe et les fichiers du pilote, et dans le fichier de classe j'ai créer la méthode de peinture:
public void paint(Graphics g){
g.drawLine(......
....
//along with all of my other draw commands
}
Plus bas dans le code, j'ai créer un JButton et à l'intérieur de cette action du bouton de l'écouteur je ne sais pas comment utiliser un objet Graphique pour créer des graphiques plus dans la JFrame. Dois-je ajouter quelque chose à mon pilote pour ce faire, ou est-il un moyen d'utiliser ces images dans mon action de l'auditeur? Merci à vous, et toute aide est appréciée.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de tirer tout l'intérieur de la
paint
méthode. LeactionPerformed
ne doit modifier l'état de quelque chose déjà dans lepaint
méthode, et ensuite appelerrepaint
. Par exemplePuis dans votre
actionPerformed
, vous pouvez modifier l'état dedrawWorld
àtrue
et appelrepaint()
.Donc, comme vous pouvez le voir, tout ce qui doit être dessiné dans le
paintComponent
méthode. Vous pouvez juste se cacher et de peinture, des rendus, et de les faire "visible" à partir d'une commande d'action. Vous devriez avoir déjà prédéfinies, ce qui pourrait posibly être tirées. Alors il suffit de changer l'état de rendreEt comme @MadPrgrammer souligné, vous ne devriez pas être la peinture sur le dessus au niveau des conteneurs comme
JFrame
. Au lieu de la peinture sur un customJPanel
ouJComponent
et remplacer lepaintComponent
méthode, au lieu deJFrame
etpaint
Voici un exemple où je tire une nouvelle place à chaque fois que le bouton est pressé. Si regarder le code, vous verrez que dans la
paintComponent
méthode, je boucle à travers une liste deSquare
s et les dessiner, et dans leactionPerformed
tout ce que je fais, c'est d'ajouter une nouvelleSquare
à laList
et appelrepaint()
Il est difficile d'être à 100%, mais il semble que vous ne comprenez pas comment la peinture custom est effectuée en Swing.
Commencer par prendre un coup d'oeil à Exécution De La Peinture Custom et La peinture dans AWT et Swing.
Essentiellement, la peinture est organisé par le Repeindre Manager, qui décide quoi et quand quelque chose doit être peint. Il appelle ensuite (à travers une chaîne de méthodes), l'
paint
méthode des composants qu'elle pense avoir besoin d'être mis à jour, en lui passant une référence à unGraphics
contexte que doivent être utilisées pour la peinture sur.En gros, si jamais votre méthode de peinture est appelé, vous devez créer la peinture de l'état actuel de votre peinture.
Vous devriez éviter primordial
paint
et au lieu d'utiliserpaintComponent
de classes de l'étendreJComponent
Votre question est un peu vague côté, de manière à ce que vous êtes en train de me demander, mais de manière générale:
paint
en Swing, nous l'emporterpaintComponent
.Si vous êtes déjà au courant de cela, vous pouvez être majeur
paint
parce que vous faites sur une JFrame et vous avez trouvé que JFrame ne dispose pas d'unpaintComponent
méthode. Vous ne devriez pas ignorerpaint
sur une JFrame. Au lieu de cela, créer un Composite ou quelque chose à mettre à l'intérieur du cadre et de la remplacerpaintComponent
sur le panneau.Il semble que vous êtes désireux de faire de la peinture à l'extérieur de
paintComponent
auquel cas probablement la meilleure façon est de faire de la peinture à une Image distincte. Puis vous peindre l'Image sur le panneau enpaintComponent
. Vous pouvez aussi mettre une Image dans un JLabel comme une ImageIcon. Voici un très simple programme de dessin à l'aide de MouseListener qui illustre ce (prises de ici):@MadProgrammer a déjà des liens vers les articles que j'allais faire un lien.