2012-08-25 3 views
0

원 (객체로 정의 됨)을 화면에 그리는 애플릿을 만들려고하는데 마우스를 사용하여이 원을 화면에서 드래그 할 수 있습니다. 지금까지 마우스를 누르면 오브젝트가 그려지고 드래그 될 수 있습니다.하지만 애플릿이 시작될 때 오브젝트를 그려서 오브젝트를 클릭하고 드래그 할 수 있습니다. 어떤 도움이나 단서도 많이 감사 할 것입니다. 여기에 코드입니다 : 애플릿의 start 방법에서MouseListener Java 애플릿을 사용하여 객체를 끌기

import java.applet.Applet; 
import java.awt.*; 
import java.awt.event.*; 

public class sheepDog extends Applet implements ActionListener, MouseListener, MouseMotionListener 
{ 
    manAndDog dog; 
    int xposR; 
    int yposR; 

    public void init() 
    { 
     addMouseListener(this); 
     addMouseMotionListener(this); 

    } 
    public void paint(Graphics g) 
    { 
     dog.display(g); 

    } 
    public void actionPerformed(ActionEvent ev) 
    {} 
    public void mousePressed(MouseEvent e) 
    { 

    } 
    public void mouseReleased(MouseEvent e) 
    { 


    } 
    public void mouseEntered(MouseEvent e) 
    {} 
    public void mouseExited(MouseEvent e) 
    {} 
    public void mouseMoved(MouseEvent e) 
    { 
    } 
    public void mouseClicked(MouseEvent e) 
    {} 
    public void mouseDragged(MouseEvent e) 
    { 
     dog = new manAndDog(xposR, yposR); 
     xposR = e.getX(); 
     yposR = e.getY(); 
     repaint(); 

    } 
} 

class manAndDog implements MouseListener, MouseMotionListener 
{ 
    int xpos; 
    int ypos; 
    int circleWidth = 30; 
    int circleHeight = 30; 
    Boolean mouseClick; 

    public manAndDog(int x, int y) 
    { 
     xpos = x; 
     ypos = y; 
     mouseClick = true; 
     if (!mouseClick){ 
      xpos = 50; 
      ypos = 50; 
     } 

    } 

    public void display(Graphics g) 
    { 
     g.setColor(Color.blue); 
     g.fillOval(xpos, ypos, circleWidth, circleHeight); 
    } 

    public void mousePressed(MouseEvent e) 
    { 
     mouseClick = true; 
    } 
    public void mouseReleased(MouseEvent e) 
    { 

    } 
    public void mouseEntered(MouseEvent e) 
    {} 
    public void mouseExited(MouseEvent e) 
    {} 
    public void mouseMoved(MouseEvent e) 
    {} 
    public void mouseClicked(MouseEvent e) 
    {} 
    public void mouseDragged(MouseEvent e) 
    { 
     if (mouseClick){ 
      xpos = e.getX(); 
      ypos = e.getY(); 
     } 


    } 
} 

감사

+1

1) http://java.sun.com/docs (공통 [자바 명명 규칙을] 배우하시기 바랍니다 /books/jls/second_edition/html/names.doc.html#73307) (특히 이름에 사용 된 사례)을 클래스, 메소드 및 속성 이름에 사용하고 일관되게 사용하십시오. 2) 교사가 '애플릿'에 프레임을 지정하지 않은 경우. 애플릿을 지정했다면 애플릿을 가르치기에 적합하지 않다는 사실을 말하고 자신을 부끄러워해야합니다. –

+0

'public void mouseDragged (MouseEvent e) { dog = new manAndDog (xposR, yposR);'더 좋은 디자인은 화면에 나타나는 것처럼 manAndDog의 인스턴스를 여러 개 만들고 (예 : 1) x, y 위치의 get/set 메소드. –

+0

@AndrewThompson +1 교사를 쉐이킹하기위한 것. – MadProgrammer

답변

1

에서, manAndDog 객체의 위치를 ​​지정하고 전화 repaint

Reimeus는 init 방법은 더 나은, 더 정확 manAndDog를 initalise하는 장소. 당신은 당신의 paint 방법에 super.paint(g)를 호출해야

  1. )

    은 당신이 어떤 피드백을 상관하지 않습니다 바랍니다. 실제로 JApplet을 사용하고 paintComponent을 무시하는 것이 좋습니다. 다만 그게 맞습니다.
  2. manAndDog 개체를 계속 만들어야 할 필요는 없습니다.

예를 들면. setLocation 메서드를 추가 한 경우 마우스를 끌 때 간단히 'setLocation`을 호출 할 수 있습니다.

public void mouseDragged(MouseEvent e) { 
    dog.setLocation(xposR, yposR); 
    xposR = e.getX(); 
    yposR = e.getY(); 
    repaint(); 
} 

이렇게하면 수명이 짧은 개체가 계속 생성되지 않으므로 더 효율적입니다. 또한 애니메이션 적용과 같이 manAndDog 개체로 더 많은 작업을 수행 할 수 있음을 의미합니다.

1

가장 간단한 방법은, 당신의 init() 방법처럼 뭔가 ManAndDog 개체를 만드는 것입니다 이럴 :

dog = new ManAndDog(0, 0); 
+0

+1은'start' 대신에'init'을 사용하는데, 훨씬 더 좋은 아이디어입니다;) – MadProgrammer

관련 문제