2015-12-08 1 views
0

Je suis apprenti développeur de logiciels. J'apprends actuellement Java et je veux créer une horloge de base. J'ai fait beaucoup de code en bricolant et en cherchant, cependant, je ne comprends pas comment je pourrais remplacer la seconde main et en dessiner une nouvelle. J'ai essayé de le faire ici:Comment utiliser un objet graphique dans une autre méthode pour chevaucher un dessin en Java?

t = new Timer(1000, timer); 
    t.setRepeats(true); 
    t.start(); 
} 

ActionListener timer = new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     x= 253; 
     y = 150; 
      x=x+12; 
      y=y+12; 
      System.out.println(x); 
      System.out.println(y); 
      ga.drawLine(250, 275, x, y); 
      repaint(); 
     } 

Je l'ai fait en utilisant des minuteries Swing et la méthode paintComponent. Cependant, l'objet graphique 'ga' ici ne lit pas le même élément du composant de peinture et ne dessine/ne chevauche pas sur l'horloge principale. Ce n'est censé être simple que tout ce qui pourrait me dérouter, car j'ai vu beaucoup d'horloges en ligne avec un code extrêmement long. Je veux simplement que la main coïncide.

Toute aide sur ce point serait grandement appréciée!

Merci d'avance

Répondre

3

Ceci est la mauvaise approche pour votre problème. Vous devez laisser les composants Swing s'inquiéter du moment de se redessiner. La solution correcte consiste à remplacer paintComponent(Graphics) dans le composant que vous dessinez et à lui faire dessiner une horloge complète à chaque étape. Ensuite, dans votre minuterie, vous devez mettre à jour une variable dans l'objet qui montre où la seconde main va être dessinée, et appeler le repaint() sur le cadre de niveau supérieur.

donc votre code de minuterie serait changé à quelque chose comme ceci:

@Override 
public void actionPerformed(ActionEvent e) { 
    int x = codeToGetXPosition(); 
    int y = codeToGetYPosition(); 
    myPanel.x = x; 
    myPanel.y = y; 
    repaint(); 
} 

Et votre méthode paintComponent ressemblerait à ceci:

@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    //Code to draw the rest of your clock 
    g.drawLine(250, 275, x, y); 
} 

Cette méthode sera appelé à chaque fois que le composant doit être redessiné (par exemple, lorsque le composant est redimensionné), il doit donc s'assurer qu'une horloge complète est toujours dessinée dans la bonne position.