Вопрос по swing, java, event-handling, mouse-listeners, mouseevent – Java - обработка события mouseMoved () в Swing

5

Я хочу слушать движения мыши и щелчки в моем JFrame. Чтобы сделать это, я добавил MouseListener, реализованный так: (весь код класса View находится вhttps://gist.github.com/2837224Занятие в классеhttps://gist.github.com/2837231)

class BattleshipsFrame extends JFrame {
  private final Board playerBoard, opponentBoard;
  private View view;

/** Main window constructor. */
BattleshipsFrame() {
  ...
  ...   
  ...
  //creating and displaying boards
  playerBoard = new Board();
  opponentBoard = new Board();
  PlayerBoardListener mouseListener = new PlayerBoardListener();
  this.addMouseListener(mouseListener);
  playerBoard.addMouseListener(mouseListener);
  opponentBoard.addMouseListener(new OpponentBoardListener());
  boards.add(playerBoard);
  boards.add(opponentBoard);
  ...
  ...
  ...
}

/** Listener responsible for handling mouse events on player board */
private class PlayerBoardListener extends MouseAdapter {
  @Override public void mousePressed(MouseEvent event) {
    try {
      if(event.getButton() == MouseEvent.BUTTON1 && controllerConnection != null)
        controllerConnection.sendShipPlacedEvent(event.getX()/40, event.getY()/40, ShipType.EMPTY);
    } catch(Exception e) {
      e.printStackTrace();
    }
  }   
  @Override public void mouseMoved(MouseEvent event) {
    //TODO
    System.out.println("Mouse movement detected! Actual mouse position is: " + event.getX()+ "," + event.getY() + ".");
  }   
  @Override public void mouseDragged(MouseEvent event) {
    //TODO
    System.out.println("Mouse movement detected! Actual mouse position is: " + event.getX()+ "," + event.getY() + ".");
  }   

}

Забавно, что mousePressed () работает хорошо, а два других - нет (ничего не отображается на консоли при перемещении мыши). Кто-нибудь может сказать мне, что я делаю не так? Заранее спасибо!

Нет ничего лучше, чтобы опубликовать здесь и SSCCE не ссылку где-нибудь на Universum, о будущих читателей mKorbel
Спасибо за интересную ссылку. Рабочий пример будет слишком длинным, на мой взгляд, я разместил весь код в ссылках сверху. mc.suchecki
Хорошо сделанный рабочий пример будет коротким на самом деле. Для простых вопросов это вам, скорее всего, не понадобится, но для сложных вопросов это то, что мы сами, вероятно, должны сделать, чтобы помочь решить, так что лучше, если вы сделаете это для нас. Удача. Hovercraft Full Of Eels
Для лучшей помощи, отправьтеSSCCE. Andrew Thompson
Хорошо, я буду иметь это в виду в следующий раз. mc.suchecki

Ваш Ответ

2   ответа
1

MouseMotionListener и сMouseListener тоже ?

Я уже пробовал это, и это то же самое, что MouseAdapter реализует и MouseMotionListener, и MouseListener. Решение уже на высоте. ;-) mc.suchecki
16

mouseMoved а такжеmouseDragged события, вам также нужно зарегистрировать слушателя какMouseMotionListener.

MouseAdapter adapter = ...
JFrame frame = ...
frame.addMouseListener(adapter);
frame.addMouseMotionListener(adapter);
Это сработало! Я должен прочитать документацию более внимательно в следующий раз. Однако - большое спасибо! mc.suchecki

Похожие вопросы