Передача позиции указателя на объект в Java - PullRequest
0 голосов
/ 23 марта 2010

У меня есть класс JPanel под названием Board со статическим подклассом MouseHanlder, который отслеживает положение мыши вдоль соответствующего слушателя в Board. В моем классе Board есть поля pointerX и pointerY.

Как передать e.getX () и e.getY () из подкласса MouseHandler в его суперкласс JPanel? Я попытался с getter, setters, super и cant получить передачу данных между подклассом и родительским классом. Я уверен, что это проблема концепции, но я застрял.

Спасибо!

Из-за массового спроса, некоторый код. Это код без каких-либо попыток передачи:

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();




    }

}

}

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

Это потому, что ваша статическая реализация класса не видит ваш экземпляр 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());
    }
  }
}
1 голос
/ 23 марта 2010

Simple. Сделайте e.getSource (), который даст вам источник, на котором произошло событие. В вашем случае это будет ваш класс Board. Просто приведите экземпляр к экземпляру 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());
    }

}
}
0 голосов
/ 23 марта 2010

Вот один из способов. Этот метод использует неявную ссылку на внешний класс 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());
        }        
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...