2010-03-23 3 views
0

J'ai une classe JPanel appelée Board avec une sous-classe statique, MouseHanlder, qui suit la position de la souris le long de l'écouteur approprié dans Board. Ma classe Board a des champs pointerX et pointerY. Comment puis-je passer le e.getX() et e.getY() de la sous-classe MouseHandler à sa super classe JPanel? J'ai essayé avec des getters, setters, super, et ne peux pas obtenir le transfert de données entre la sous-classe et la classe parente. Je suis certain que c'est un problème de concept, mais je suis bloqué.Passage de la position du pointeur sur un objet en Java

Merci!

En raison de la demande générale, du code. Ce code est sans atempt de passage:

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

Pouvez-vous poster le code pertinent? Cela rendra beaucoup plus facile de répondre à votre question. –

+0

Vous avez une classe MouseHandler qui étend un JPanel !! ??, hmmm peut-être que vous voulez dire classe interne ... – ultrajohn

Répondre

1

simple. Faites un e.getSource() qui vous donnera la source sur laquelle l'événement s'est produit. Dans votre cas, ce sera votre classe de conseil. Il suffit de lancer l'instance sur une instance de la carte et vous êtes défini.

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

Ceci parce que votre implémentation statique de la classe ne voit pas votre instance JPanel. Vous pouvez le faire passer une référence à la MouseAdapter (ou 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

Voici une solution. Cette technique utilise la référence implicite à la classe externe de 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()); 
     }   
    }; 
} 
Questions connexes