Redessiner les graphiques en Java
Je suis juste dans les graphiques en Java et j'ai un problème. J'ai créé une fenêtre JFrame (NetBeans Designer) avec un panneau Composite et j'ai dessiné quelques graphiques sur elle. Ensuite, j'ai ajouté un JButton qui a changé une variable, qui change la position X d'un carré sur un Composite.
Sur le bouton appuyez sur ce code s'execute:
drawObject.setX(150);
drawObject.repaint();
drawObject est une instance de cette classe:
public class sola extends JPanel {
private int x = 10;
@Override
public void paintComponent(Graphics g){
super.paintComponents(g);
super.setBackground(Color.WHITE);
g.setColor(Color.ORANGE);
g.fill3DRect(x, 160, 100, 50, true);
}
public void setX(int xX){
x = xX;
}
}
Maintenant, lorsque j'appuie sur le JButton, le rectangle n'passer à la nouvelle position, cependant, il est toujours visible dans l'ancienne position. Seulement quand je redimensionner la fenêtre d'actualiser et le rectangle ancien disparaît. Comment puis-je résoudre ce problème, de sorte que lorsque j'appuie sur le bouton, le rectangle n'est visible que dans la nouvelle position?
J'mince c'est plutôt une question claire pour la première question.
OriginalL'auteur Squeazer | 2011-03-13
Vous devez vous connecter pour publier un commentaire.
C'est
pas
Grande différence entre les deux! Le premier indique à votre Composite à faire toutes les fonctions de maintenance normalement effectuées par la méthode paintComponent, y compris repeindre le fond (clé de votre projet). La deuxième, celle de votre vocation n'est pas l'une de ces fonctionnalités. Donc, mon conseil est de se débarrasser de l'arrière s dans votre super appel.
Vous êtes les bienvenus -- merci pour les commentaires!
OriginalL'auteur Hovercraft Full Of Eels
Vous pouvez utiliser les méthodes suivantes de JComponent: ( http://download.oracle.com/javase/6/docs/api/javax/swing/JComponent.html )
Vous pouvez appeler ces avant
redraw()
OriginalL'auteur Bernd Elkemann
Vous pouvez utiliser
repaint()
méthode pour faire tis.Si vous utilisez le paintComponent() sur le panneau. Vous devriez à mon humble avis, prendre soin de la peinture dans l'ensemble du panneau. Il n'y a pas de code dans votre exemple, qui prend en charge environ la suppression de l'ancienne peinte rectangles.
Ce que je recommande est la création d'un Composant pour votre rectangles. (Vous pouvez étendre à partir de Composant), alors vous pouvez remplacer le
paintComponent
méthode de ces classes comme vous l'avez fait dans votre panneau. Parce que le comité devrait agir comme un composant conteneur. Pas que le dessin des rectangles en soi.Savoir ajouter des instances de ces composants normal Composite. Ceci devrait alors mettre à jour comme prévu.
OriginalL'auteur Chris