From 52d244c7588577866683c60772d601e099d947b6 Mon Sep 17 00:00:00 2001 From: philippe lhardy Date: Sat, 2 Dec 2017 19:18:17 +0100 Subject: [PATCH] keys are bound to maze display and get focus when mous mouse over it --- java/org/artisanlogiciel/games/Display.java | 27 +++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/java/org/artisanlogiciel/games/Display.java b/java/org/artisanlogiciel/games/Display.java index 3945da5..f09b75e 100644 --- a/java/org/artisanlogiciel/games/Display.java +++ b/java/org/artisanlogiciel/games/Display.java @@ -497,10 +497,9 @@ public class Display extends JFrame JButton button = new JButton(direction); button.addActionListener(goAction); KeyStroke keystroke = KeyStroke.getKeyStroke(key); - panel.getInputMap().put(keystroke, actionName); - panel.getActionMap().put(actionName, goAction); - controlPanel.getInputMap().put(keystroke, actionName); - controlPanel.getActionMap().put(actionName, goAction); + // attach keys to maze + maze.getInputMap().put(keystroke, actionName); + maze.getActionMap().put(actionName, goAction); return button; } @@ -681,14 +680,19 @@ public class Display extends JFrame // not set by default for debug, will show any path boolean showAll = false; + Position getPosition(int x, int y) + { + int pX = (int) ((double) (x - cp.getOffsetX()) / cp.getWidth()); + int pY = (int) ((double) (y - cp.getOffsetY()) / cp.getHeight()); + return new Position(pX,pY); + } + @Override public void mouseDragged(MouseEvent e) { // should find the cell ... DirectionPosition last = null; - int pX = (int) ((double) (e.getX() - cp.getOffsetX()) / cp.getWidth()); - int pY = (int) ((double) (e.getY() - cp.getOffsetY()) / cp.getHeight()); short path = 0; - Position newPosition = new Position(pX,pY); + Position newPosition = getPosition(e.getX(),e.getY()); if (drawingPath == null ) { drawingPath = new LinkedList<>(); @@ -724,6 +728,11 @@ public class Display extends JFrame @Override public void mouseMoved(MouseEvent e) { // System.out.println("Mouse moved (" + e.getX() + ',' + e.getY() + ')'); + Position newPosition = getPosition(e.getX(),e.getY()); + if ( ( newPosition.getX() >= 0 ) && ( newPosition.getY() >= 0 ) ) + { + requestFocus(); + } } public void setShowAll(boolean showall ) @@ -821,6 +830,10 @@ public class Display extends JFrame { this.map = map; solvedPath=null; + // could be kept + drawingPath=null; + sX=0; + sY=0; } public void setWallSize(int size)