setLocation() 및 마우스 위치를 사용하여 화면 주위로 드래그 할 수있는 장식 (제목 표시 줄, 닫기 버튼 등)이없는 JFrame이 있습니다. 윈도우와의 mouseEntered 이벤트에 불행하게도,의 mouseExited 이벤트는 윈도우의 첫 번째 이동에 따라이라고 frame.setLocation()이 호출 될 때 Java mouseExited 이벤트가 발생합니다.
...- 이동 마우스
- 클릭 마우스를 해고하고의 mousePressed 이벤트가 발생합니다.
- 끌기 mouse 및 mouseDragged 이벤트가 발생하고 setLocation이 호출됩니다.
- 마우스가 창에 있어도 mouseExited 이벤트가 발생합니다!
- 이 시점에서 마우스를 창 밖으로 이동하면 mouseExited가 실행되지 않습니다.
- , 나는이 문제를 해결하려면 어떻게 단지 수동으로 화면에 마우스 위치를 테스트 이외의 1
단계로 다시 재설정 아웃 한 후 다시 마우스를 이동?
편집 : 여기에이 코드
import java.awt.*;
import javax.swing.*;
import java.awt.Event;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
class DragNDropper implements MouseMotionListener, MouseListener
{
private int x, y;
private int dx, dy;
private boolean clicked;
private JFrame frame;
public DragNDropper(JFrame frame)
{
dx = dy = 0;
this.frame = frame;
}
public void mouseDragged(MouseEvent e)
{
x = e.getXOnScreen();
y = e.getYOnScreen();
frame.setLocation(x-dx, y-dy);
}
public void mouseMoved(MouseEvent e)
{
x = e.getXOnScreen();
y = e.getYOnScreen();
}
public void mouseClicked(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
clicked = true;
dx = e.getX();
dy = e.getY();
}
public void mouseReleased(MouseEvent e)
{
clicked = false;
}
public void mouseEntered(MouseEvent e)
{
System.out.println("Mouse entered");
}
public void mouseExited(MouseEvent e)
{
System.out.println("Mouse exited");
}
}
public class Program
{
public static void main(String[] argv)
{
JFrame jf = new JFrame();
DragNDropper dnd = new DragNDropper(jf);
jf.setSize(new Dimension(512, 512));
jf.addMouseListener(dnd);
jf.addMouseMotionListener(dnd);
jf.show();
}
}
를, 문제를 보여주는 [MCVE] (http://stackoverflow.com/help/mcve) 게시 할 수 있습니다. –
@ 앤드류 톰슨 완료. –
'Error : 메인 메소드를 클래스 DragNDropper에서 찾을 수 없습니다. 메인 메소드를 다음과 같이 정의하십시오 : public static void main (String [] args)'.. MCVE는 메인을 포함합니다. –