2014-05-10 1 views
-1
이 코드는 내의 mouseDragged 기능에

에서 끌어온과는 장식을 가지지 JFrame의마우스는 윈도우

if (mouse.y < 25 && !closePol.contains(mouse)){ 
    getParent().getParent().getParent().getParent().setLocation(new Point(e.getXOnScreen() - mouse.x, e.getYOnScreen() - mouse.y)); 
} 

를 드래그하고 나는 내가 JFrame의에서 마우스를 이동 할 때마다 mouse = new Point()을 설정하는 코드가 있습니다. 잘 작동하지만 버그가 있습니다. mouse.y >= 25으로 드래그를 시작하고 창 밖으로 드래그 할 때마다이 this이 발생합니다. 창은 왼쪽 상단 모서리를 마우스로 이동시킵니다.

+0

, 작성 및 게시 고려 Point, textPtmousePt의 두 인스턴스를, 부여/mcve) 코드를 압축하고 실행하는 가장 작은 비트로 압축하고 외부 종속성 (예 : 데이터베이스 또는 이미지에 연결해야 함)이 없으며 문제와 관련이없는 추가 코드가 없지만 문제. –

+2

그런데 getParent(). getParent() ... 등의 코드는 매우 약해 보입니다. 내 견해를 얻는 좀 더 튼튼한 방법을 찾고 싶습니다. –

+0

@HovercraftFullOfEels getRootPane()을 사용하여 시도했지만 작동하지 않았습니다. 그런 다음 주 창에 이름을 지정하고 getParent.getName()을 사용하고 getParents를 추가 할 때까지 계속 추가했습니다. – usama8800

답변

2

그림에서 here으로 표시된 것처럼 현재 마우스 지점과 이전 마우스 지점 사이의 차이점만큼 렌더링 지점을 오프셋해야합니다. http://stackoverflow.com/help A [, 최소를 완료하고 검증 가능한 예제 프로그램 (곧 도움을받을 수없는 경우

this.addMouseMotionListener(new MouseMotionAdapter() { 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     int dx = e.getX() - mousePt.x; 
     int dy = e.getY() - mousePt.y; 
     textPt.setLocation(textPt.x + dx, textPt.y + dy); 
     mousePt = e.getPoint(); 
     repaint(); 
    } 
});