2010-03-23 57 views
0

我有一个名为Board的JPanel类,它带有一个静态子类MouseHanlder,它可以跟踪Board中相应侦听器的鼠标位置。我的Board类有字段pointerX和pointerY。将指针位置传递给Java中的对象

如何将MouseHandler子类中的e.getX()和e.getY()传递给它的超类JPanel?我尝试了getter,setter,super,并且无法获得子类和父类之间的数据传输。我确定这是一个概念问题,但我坚持。

谢谢!

由于受欢迎的需求,一些代码。这是一个没有经过任何atempt代码:

public class Board extends JPanel { 


int x; // Mouse pointer fields. 
int y; 

public Board() { 

      blah blah 

    MouseHandler handler = new MouseHandler(); 
    addMouseMotionListener(handler); 

} 


static class MouseHandler implements MouseMotionListener { 
    int pointerX; 
    int pointerY; 

    public void mouseMoved(MouseEvent e) { 

      i'd like to do something like: 
       super.x = e.getX(); 
       super.x = e.getY(); 

       or 

       Board.setX() = e.getX(); // Missing setters below, this is just an example. 
       Board.setX() = e.getY(); 




    } 

} 

}

+0

您能否发布相关代码?这将使您更容易回答您的问题。 – 2010-03-23 00:47:45

+0

你有一个MouseHandler类来扩展一个JPanel !! ??,嗯,也许你的意思是内部类... – ultrajohn 2010-03-23 00:49:53

回答

1

简单。做一个e.getSource(),它会给你发生事件的来源。在你的情况下,这将是你的董事会班。只需将实例转换为Board实例并设置即可。

public class Board extends JPanel { 


int x; // Mouse pointer fields. 
int y; 

public Board() { 

      blah blah 

    MouseHandler handler = new MouseHandler(); 
    addMouseMotionListener(handler); 

} 


static class MouseHandler implements MouseMotionListener { 
    int pointerX; 
    int pointerY; 

    public void mouseMoved(MouseEvent e) { 
     Board b = (Board) e.getSource(); 
     b.setX(e.getX()); 
     b.setY(e.getY()); 
    } 

} 
} 
2

这是因为你的静态实现的类的没有看到你的JPanel实例。你可以这样做传递参考MouseAdapter(或MouseListener

class MyPanel extends JPanel 
{ 
    MyPanel() 
    { 
    item.addMouseListener(new MyListener(this)); 
    } 

    void pass(int x, int y) 
    { 
    //whatever 
    } 

    class MyListener extends MouseAdapter 
    { 
    MyPanel ref; 

    MyListener(MyPanel ref) 
    { 
     this.ref = ref; 
    } 

    public void mousePressed(MouseEvent e) 
    { 
     ref.pass(e.getX(), e.getY()); 
    } 
    } 
} 
0

这是一种方法。此技术使用隐含引用的外部类MouseHandler

public class Board extends JPanel { 

    public Board() { 
     addMouseListener(new MouseHandler()); 
    } 

    private void doSomething(int x, int y) { 
     // ... 
    } 

    private final class MouseHandler extends MouseAdapter { 
     public void mouseMoved(MouseEvent e) { 
      Board.this.doSomething(e.getX(), e.getY()); 
     }   
    }; 
}