2016-04-20 5 views
0

Ich habe diesen Code, es schafft ein einfaches Smily Gesicht. Ich möchte die Augen des Gesichts mit der Mausbewegung bewegen. Hier ist der CodeWie kann ich eine Form auf Maus verschieben bewegen in Java

int a,b; 
public void recieve(int x,int y) 
{ 
    a=x; 
    b=y; 
    System.out.println("xaxis"+a+"yaxis"+b); 
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    System.out.println("x axis: "+a+" -- y axis: "+b); 
    g.drawArc(100, 50, 150, 150, 0, 360); 
    g.drawArc(125, 65, 40, 40, 0, 360); 
    g.drawArc(180, 65, 40, 40, 0, 360); 
    g.drawArc(165, 105, 15, 15, 60, 180); 


    g.fillOval(a-130, 70, 15, 15); 
    g.fillOval(b-185, 70, 15, 15); 
} 
+1

Hier ist [ein Beispiel] (http://stackoverflow.com/questions/34981403/bufferedimage-not-being-cleared-before-each-rendering/35002727#35002727) von dem, was Sie suchen. –

Antwort

1

Sie müssen Mouse implementieren und befestigen Sie es an, was auch immer JPanel Subklassen Ihre paintcomponent() -Methode aus ist. Ändern Sie in ihren Methoden die Werte Ihrer Variablen 'a' und 'b'.

Unten ist ein Beispiel. Es war mir aus Ihrer Frage nicht klar, welche Art von Bewegung die Augen machen sollen - z. ob die Schüler den Mauszeiger immer "anschauen" sollen, ohne die Augen zu verlassen - wie den Startwert von x von der x-Koordinate des Mauszeigers für das linke Auge und den Startwert von x von der y-Koordinate von Der Mauszeiger für das rechte Auge, wie das Code-Snippet andeutet, führt nicht wirklich zu einem aussagekräftigen Ergebnis.

In der folgenden Demo folgen also die Augen nur dem Mauszeiger. Es zeigt Ihnen, wie Sie das Mausbewegungsereignis aufnehmen und die X- und Y-Koordinaten der Maus erhalten - wie Sie diese verwenden, um die Position der Pupillen auf die von Ihnen gewünschte Art und Weise anzupassen, liegt bei Ihnen und ist (hoffentlich) jetzt nur eine mathematische Frage.

import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 

public class MouseTrackingSmilieFace extends JFrame { 

    private int a; 
    private int b; 

    private JPanel smilieFacePanel = new JPanel() { 
     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.drawArc(100, 50, 150, 150, 0, 360); 
      g.drawArc(125, 65, 40, 40, 0, 360); 
      g.drawArc(180, 65, 40, 40, 0, 360); 
      g.drawArc(165, 105, 15, 15, 60, 180); 
      g.fillOval(a, b, 15, 15); 
      g.fillOval(a+55, b, 15, 15); 
      // Register the motion listener 
      addMouseMotionListener(new MouseMotionListener() { 

       // Do the same thing whether the mouse button is depressed... 
       public void mouseDragged(MouseEvent e) { 
        processMovement(e); 
       } 

       // ... or not. 
       public void mouseMoved(MouseEvent e) { 
        processMovement(e); 
       } 

       /* Process the movement by capturing the x coordinate of the mouse in member variable 'a' 
       * and the y coordinate in member variable 'b'. 
       */ 
       private void processMovement(MouseEvent e) { 
        a = e.getX(); 
        b = e.getY(); 
        System.out.println("X = " + a + " Y = " + b); 
        smilieFacePanel.repaint(); 
       } 
      }); 
     } 
    }; 

    private MouseTrackingSmilieFace() { 
     // Invoke the JFrame superclass constructor and configure the frame 
     super("Mouse-tracking smilie face"); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setSize(400,400); 
     this.setVisible(true); 
     // Add a panel to the frame and draw the face within it. 
     this.add(smilieFacePanel); 
    } 

    public static void main(String[] args) { 
     // Create on the Event Dispatch Thread. 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new MouseTrackingSmilieFace(); 
      } 
     }); 
    } 
} 
Verwandte Themen