Java - comment faire pour effacer des graphiques à partir d'un Composite
Je suis de la création d'un programme simple où je dessine un ovale noir où je clique avec ma souris. Cependant je veux un nouveau ovale de comparaître et de l'ancien à disparaître. Comment pourrais-je aller sur le faire? J'ai foiré autour avec le removeAll() insérée dans mon mousePressed méthode, mais il ne fonctionne pas pour moi. Est le removeAll() la méthode même adapté pour cela? Ou dois-je utiliser autre chose? Désolé si la réponse est évidente, mais je suis encore nouveau à cela et essayer d'apprendre. Tout conseil serait grandement apprécié. Merci.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PaintPractice extends JPanel implements MouseListener {
Random rand = new Random();
int x = rand.nextInt(450);
int y = rand.nextInt(450);
public PaintPractice(){
super();
addMouseListener(this);
}
public static void main(String[] args){
JFrame frame = new JFrame();
PaintPractice panel = new PaintPractice();
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillOval(x, y, 50, 50);
}
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
removeAll();
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
OriginalL'auteur anonymous noob | 2015-05-02
Vous devez vous connecter pour publier un commentaire.
Solution immédiate qu'il suffit d'appeler
super.paint(g)
dans lepaint(Graphics g)
méthode.La Peinture Mécanisme et pourquoi Devrais-je remplacer
paintComponent()
au lieu de l'annulation de lapaint()
:Javadoc explique la Peinture Mécanisme:
C'est pourquoi votre
PaintPractice
code doit invoquersuper.paintComponent(g)
à la place.Aussi, vous n'avez pas besoin d'appeler
removeAll()
dans lemousePressed(MouseEvent e)
méthode.mousePressed
méthode dans unJPanel
avant. Est-ce la même chose queaddMouseListener()
?vérifier ceci.
Merci pour l'entrée, j'ai bien aimé votre réponse les mieux. Exactement comment ça marche? Tout d'abord, je suppose que la méthode est appelée à partir de la classe de Conteneur qui est la super classe de JComponent? Deuxièmement, exactement ce que dans la méthode de l'explication vous dit qu'il remplacerait l'ancienne peinture?docs.oracle.com/javase/7/docs/api/java/awt/...
j'ai ajouté de la Peinture Mécanisme à ma réponse 😉 n'oubliez pas un upvote 😉
beaucoup de grâce et vous l'avez obtenu
OriginalL'auteur MChaker
Depuis un Composite est une sous-classe de JComponent, vous devez remplacer
paintComponent
au lieu depaint
et aussi utilisersuper.paintComponent(g)
dans lepaintComponent
méthode.Lorsque vous utilisez
removeAll
, tous les composants (boutons, champs de texte, étiquettes, etc) dans le Composite sont supprimés, le cas échéant. Cependant, vous ne semblez pas à ajouter tous les composants du Composite, de sorte qu'il n'est pas nécessaire d'appeler cette méthode.paintComponent()
en Swing. (+1). Vous remplacez paint() lors de l'utilisation de AWT, qui vous ne devriez pas utiliser plus.OriginalL'auteur TNT
Une solution de contournement possible si u veux juste montrer le nouvellement créé ovale. Faire de votre cadre et panneau statique, puis d'appeler cadre.setContentPane(panneau) dans mousePressed.
Une autre méthode de travail est de les appeler.g.clearRect(0, 0, getWidth(), getHeight()) dans la peinture, mais cela permettra à l'ensemble du fond whitecolor.
OriginalL'auteur Feng Hao
juste fillOval avec la couleur d'arrière-plan du dessin actuel de surface
si vous le souhaitez, vous pouvez effacer la zone:
plus à OracleDoc
OriginalL'auteur Tirupati Rao