2011-11-18 1 views
1

지도 편집기를 만들고 있는데, 클릭하면지도에 데이터 요소를 추가하는 데 사용됩니다.클릭 할 때마다 java MouseListener가 동일한 값 x 및 y 값을 반환하는 이유는 무엇입니까?

public void mouseClicked(MouseEvent e) { 
    int x = getX(); 
    int y = getY(); 
    System.out.println("clicked at (" + x + ", " + y + ")"); 
} 

그러나, 나는 창에 클릭에 상관없이, 그것은 동일한 값을 반환

public MapEditor() throws HeadlessException, FileNotFoundException, XMLStreamException { 
    super("MapEditor"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Set JFrame properties. 
    this.setTitle("Map Editor"); 
    this.setSize(PREFERRED_WIDTH, PREFERRED_HEIGHT); 
    this.setBackground(Color.gray); 

    this.setJMenuBar(makeMenuBar()); 

    JPanel mainPanel = new JPanel(new BorderLayout()); 

    Icon image = new ImageIcon("map.jpg"); 
    JLabel label = new JLabel(image); 
    scrollPane = new JScrollPane(); 
    scrollPane.getViewport().add(label); 

    scrollPane.addMouseListener(this); 

    mainPanel.add(scrollPane, BorderLayout.CENTER); 


    this.getContentPane().add(mainPanel); 

    this.getContentPane().add(makeStatusBar(), BorderLayout.SOUTH); 

    setVisible(true); 
} 

는 또한 마우스를 클릭했을 때의 다음과 같은 이벤트가 있습니다. 화면 전체에서 다른 창으로 전체 창을 이동하면 다른 값을 반환하는 것으로 나타났습니다. 창 왼쪽 상단에 해당하는 것으로 나타납니다. 다른 구성 요소에 MouseListener를 추가하려고 시도했지만 각각의 결과가 동일합니다. 도움을 주시면 감사하겠습니다.

+0

getX와 getY() 메소드 안에 무엇을 발생한 위치 : 그것은 할 필요가? – r0ast3d

답변

5

마우스 이벤트를 수신하기위한 추상 어댑터 클래스이므로 MouseAdapter을 대신 사용하십시오.

코드 예를 들어 Java MouseListener의 대답을 참조하십시오.

편집 : getX()getY() 자신의 방법이 아니라면, 그래서 getX()getY() 당신이 무엇을 기대 반환하지 않습니다 MouseEvent 변수 참조를 사용하지 않는?

public void mouseClicked(MouseEvent e) { 
    int x = e.getX(); 
    int y = e.getY(); 
    System.out.println("clicked at (" + x + ", " + y + ")"); 
} 
+0

+1 좋은 캐치 :-) – kleopatra

0

이 그것을 알아 냈 :

은 당신의 코드를 변경

. 난 그냥 패널의 X 및 Y를 얻기 전에

public void mouseClicked(MouseEvent e) { 
    int x = e.getX(); 
    int y = e.getY(); 
    System.out.println("clicked at (" + x + ", " + y + ")"); 
} 

아닌 마우스 이벤트

관련 문제