OSDN Git Service

Make it easier to play using the keyboard.
authorSylvain Vedrenne <svedrenne@users.sourceforge.jp>
Wed, 21 Dec 2011 01:25:25 +0000 (02:25 +0100)
committerSylvain Vedrenne <svedrenne@users.sourceforge.jp>
Wed, 21 Dec 2011 01:25:25 +0000 (02:25 +0100)
src/classes/net/jankenpoi/sudokuki/ui/swing/DualSelectionDialog.java
src/classes/net/jankenpoi/sudokuki/ui/swing/SelectMemosPanel.java
src/classes/net/jankenpoi/sudokuki/ui/swing/SelectNumberPanel.java
src/classes/net/jankenpoi/sudokuki/ui/swing/SwingGrid.java

index 5ac71c0..eb65cf4 100644 (file)
@@ -30,7 +30,7 @@ public class DualSelectionDialog extends JDialog {
        public DualSelectionDialog(boolean valuePickerOnTop, JFrame parent, byte previousValue,
                        Byte[] previousMemos) {
                super(parent, true);
-               JTabbedPane tabbedPane = new JTabbedPane();
+               tabbedPane = new JTabbedPane();
                numberPanel = new SelectNumberPanel(this, previousValue);
                memosPanel = new SelectMemosPanel(this, previousMemos);
                tabbedPane.addTab("Select", numberPanel);
@@ -43,6 +43,11 @@ public class DualSelectionDialog extends JDialog {
                setResizable(false);
        }
 
+       private JTabbedPane tabbedPane;
+       JTabbedPane getTabbedPane() {
+               return tabbedPane;
+       }
+       
        private int value = -1;
        private byte[] memos = null;
        
index db10738..65c5276 100644 (file)
@@ -19,9 +19,7 @@ package net.jankenpoi.sudokuki.ui.swing;
 \r
 import java.awt.BorderLayout;\r
 import java.awt.Component;\r
-import java.awt.Container;\r
 import java.awt.Font;\r
-import java.awt.Frame;\r
 import java.awt.GridLayout;\r
 import java.awt.event.FocusAdapter;\r
 import java.awt.event.FocusEvent;\r
@@ -32,17 +30,8 @@ import java.util.Iterator;
 \r
 import javax.swing.JButton;\r
 import javax.swing.JCheckBox;\r
-import javax.swing.JDialog;\r
 import javax.swing.JPanel;\r
-import javax.swing.JTabbedPane;\r
 import javax.swing.JToggleButton;\r
-import javax.swing.WindowConstants;\r
-\r
-/*\r
- * InputDialog.java\r
- *\r
- * Created on Mar 25, 2011, 5:50:15 PM\r
- */\r
 \r
 /**\r
  * \r
@@ -53,9 +42,7 @@ public class SelectMemosPanel extends JPanel {
 \r
        private JButton btnClear;\r
        private JCheckBox[] ckb = new JCheckBox[9];\r
-       private int focusedElement;\r
-       private boolean focusedOkButton;\r
-       private boolean focusedClearButton;\r
+       private int focusedElement = 4;\r
        private JButton btnConfirm;\r
        private JPanel panelClear = new JPanel(new GridLayout());\r
        private JPanel panel789 = new JPanel(new GridLayout());\r
@@ -76,6 +63,8 @@ public class SelectMemosPanel extends JPanel {
                super(true);\r
                this.parent = parent;\r
                initComponents(previousMemos);\r
+               parent.getTabbedPane().addKeyListener(innerKeyListener);\r
+               parent.getTabbedPane().addFocusListener(innerFocusListener);\r
        }\r
 \r
        private void configureCheckBox(JCheckBox btn, String text, final int button) {\r
@@ -180,6 +169,14 @@ public class SelectMemosPanel extends JPanel {
                focusedElement = 4;\r
        }\r
 \r
+       private boolean isTabSelected() {\r
+               int idx = parent.getTabbedPane().getSelectedIndex();\r
+               if (idx != 1) {\r
+                       System.out.println("SelectMemosPanel.isTabSelected() TAB NOT SELECTED");\r
+               }\r
+               return (idx == 1);\r
+       }\r
+       \r
        private void buttonClicked(int button) {\r
                System.out.println("InputDialog.buttonClicked() button:" + button);\r
                byte value = (byte)(button + 1);\r
@@ -207,13 +204,35 @@ public class SelectMemosPanel extends JPanel {
        private class InnerKeyListener extends KeyAdapter {\r
                @Override\r
                public void keyPressed(KeyEvent ke) {\r
+                       if (isTabSelected() && focusedTabPane()) {\r
+                               int code = ke.getKeyCode();\r
+                               if (code == KeyEvent.VK_H) {\r
+                                       System.out.println("MemosPanel tab selected <>HL");\r
+                                       int index = parent.getTabbedPane().getSelectedIndex();\r
+                                       int newIndex = (index == 0)?1:0;\r
+                                       System.out.println("MemosPanel tab selected index:"+index);\r
+                                       System.out.println("MemosPanel tab selected newIndex:"+newIndex);\r
+                                       parent.getTabbedPane().setSelectedIndex(newIndex);\r
+                                       parent.getTabbedPane().requestFocusInWindow();\r
+                                       return;\r
+                               }\r
+                               else if (code == KeyEvent.VK_L) {\r
+                                       return;\r
+                               }\r
+                       }\r
+                       if (!isTabSelected()) {\r
+                               return;\r
+                       }\r
                        int code = ke.getKeyCode();\r
-                       if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP) {\r
-                               if (focusedClearButton) {\r
+                       if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP || code == KeyEvent.VK_K) {\r
+                               if (focusedTabPane()) {\r
+                                       return;\r
+                               }\r
+                               if (focusedClearButton()) {\r
+                                       parent.getTabbedPane().requestFocusInWindow();\r
                                        return;\r
                                }\r
-                               if (focusedOkButton) {\r
-                                       focusedOkButton = false;\r
+                               if (focusedOkButton()) {\r
                                        ckb[focusedElement].requestFocusInWindow();\r
                                        return;\r
                                }\r
@@ -224,12 +243,17 @@ public class SelectMemosPanel extends JPanel {
                                focusedElement = Math.max(0, focusedElement-3);\r
                                ckb[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN) {\r
-                               if (focusedOkButton) {\r
+                       else if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN || code == KeyEvent.VK_J) {\r
+                               if (focusedTabPane()) {\r
+                                       btnClear.requestFocusInWindow();\r
                                        return;\r
                                }\r
-                               if (focusedClearButton) {\r
-                                       focusedClearButton = false;\r
+                               if (focusedOkButton()) {\r
+                                       return;\r
+                               }\r
+                               if (focusedClearButton()) {\r
+                                       focusedElement = 1;\r
+                                       System.out.println("focusedElement: "+focusedElement);\r
                                        ckb[focusedElement].requestFocusInWindow();\r
                                        return;\r
                                }\r
@@ -240,15 +264,17 @@ public class SelectMemosPanel extends JPanel {
                                focusedElement = Math.min(8, focusedElement+3);\r
                                ckb[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT) {\r
-                               if (focusedElement%3 == 0 || focusedOkButton || focusedClearButton) {\r
+                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT || code == KeyEvent.VK_H) {\r
+                               if (focusedElement%3 == 0 || btnConfirm.hasFocus() || btnClear.hasFocus()) {\r
+                                       System.out\r
+                                                       .println("SelectMemosPanel.InnerKeyListener.keyPressed() OK or CLEAR has focus");\r
                                        return;\r
                                }\r
                                focusedElement = Math.max(0, focusedElement-1);\r
                                ckb[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT) {\r
-                               if (focusedElement%3 == 2 || focusedOkButton || focusedClearButton) {\r
+                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_L) {\r
+                               if (focusedElement%3 == 2 || focusedOkButton() || focusedClearButton()) {\r
                                        return;\r
                                }\r
                                focusedElement = Math.min(8, focusedElement+1);\r
@@ -259,12 +285,24 @@ public class SelectMemosPanel extends JPanel {
                        }\r
                }\r
 \r
+               private boolean focusedTabPane() {\r
+                       return parent.getTabbedPane().hasFocus();\r
+               }\r
+\r
                @Override\r
                public void keyReleased(KeyEvent ke) {\r
-                       int code = ke.getKeyCode();\r
-                       if (code == KeyEvent.VK_SPACE) {\r
+                       if (!isTabSelected()) {\r
+                               return;\r
                        }\r
-                       else if (code == KeyEvent.VK_ENTER) {\r
+                       int code = ke.getKeyCode();\r
+                       if (code == KeyEvent.VK_ENTER) {\r
+                               if (focusedClearButton() || focusedOkButton()) {\r
+                                       /*\r
+                                        * Buttons actions are managing this so Nothing to do.\r
+                                        */\r
+                                       return;\r
+                               }\r
+                               parent.memosPanelConfirmed();\r
                        }\r
                }\r
 \r
@@ -274,8 +312,6 @@ public class SelectMemosPanel extends JPanel {
 \r
                @Override\r
                public void focusGained(FocusEvent e) {\r
-                       focusedClearButton = false;\r
-                       focusedOkButton = false;\r
                        \r
                        Component comp = e.getComponent();\r
                        if (comp == ckb[focusedElement]) {\r
@@ -287,17 +323,28 @@ public class SelectMemosPanel extends JPanel {
                                        return;\r
                                }\r
                        }\r
-                       if (comp == btnClear) {\r
-                               focusedClearButton = true;\r
-                               focusedElement = focusedElement%3;\r
-                               return;\r
-                       }\r
-                       if (comp == btnConfirm) {\r
-                               focusedOkButton = true;\r
-                               focusedElement = 6 + focusedElement%3;\r
-                               return;\r
-                       }\r
+//                     if (comp == btnClear) {\r
+//                             focusedElement = focusedElement%3;\r
+//                             return;\r
+//                     }\r
+//                     if (comp == btnConfirm) {\r
+//                             focusedElement = 6 + focusedElement%3;\r
+//                             return;\r
+//                     }\r
+//                     if (comp == parent.getTabbedPane()) {\r
+//                             System.out\r
+//                                             .println("SelectMemosPanel.InnerFocusListener.focusGained() gettabbedpane.hasFocus():"+parent.getTabbedPane().hasFocus());\r
+//                             focusedElement = 1;\r
+//                             return;\r
+//                     }\r
                }\r
        }\r
        \r
+       private boolean focusedOkButton() {\r
+               return btnConfirm.hasFocus();\r
+       }\r
+\r
+       private boolean focusedClearButton() {\r
+               return btnClear.hasFocus();\r
+       }\r
 }\r
index ce3ca49..bfced72 100644 (file)
@@ -19,9 +19,7 @@ package net.jankenpoi.sudokuki.ui.swing;
 \r
 import java.awt.BorderLayout;\r
 import java.awt.Component;\r
-import java.awt.Container;\r
 import java.awt.Font;\r
-import java.awt.Frame;\r
 import java.awt.GridLayout;\r
 import java.awt.event.FocusAdapter;\r
 import java.awt.event.FocusEvent;\r
@@ -29,15 +27,8 @@ import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;\r
 \r
 import javax.swing.JButton;\r
-import javax.swing.JDialog;\r
 import javax.swing.JPanel;\r
 \r
-/*\r
- * InputDialog.java\r
- *\r
- * Created on Mar 25, 2011, 5:50:15 PM\r
- */\r
-\r
 /**\r
  *\r
  * @author svedrenne\r
@@ -63,7 +54,7 @@ public class SelectNumberPanel extends JPanel {
     private JPanel panel456 = new JPanel(new GridLayout());\r
     private JPanel panel123 = new JPanel(new GridLayout());\r
        private byte previousValue = 0;\r
-       \r
+\r
        private InnerKeyListener innerKeyListener = new InnerKeyListener();\r
        private int focusedElement = 4;\r
        private InnerFocusListener innerFocusListener = new InnerFocusListener();\r
@@ -75,6 +66,8 @@ public class SelectNumberPanel extends JPanel {
         this.previousValue = previousValue;\r
         initComponents();\r
         btns[focusedElement].requestFocusInWindow();\r
+               parent.getTabbedPane().addKeyListener(innerKeyListener);\r
+               parent.getTabbedPane().addFocusListener(innerFocusListener);\r
     }\r
 \r
     private void configureButton(JButton btn, String text, final int value) {\r
@@ -125,7 +118,15 @@ public class SelectNumberPanel extends JPanel {
         panel123.add(btn3, BorderLayout.LINE_END);\r
     }\r
 \r
-    private void buttonClicked(int button) {\r
+       private boolean isTabSelected() {\r
+               int idx = parent.getTabbedPane().getSelectedIndex();\r
+               if (idx != 0) {\r
+                       System.out.println("SelectNumberPanel.isTabSelected() TAB NOT SELECTED");\r
+               }\r
+               return (idx == 0);\r
+       }\r
+\r
+       private void buttonClicked(int button) {\r
        System.out.println("InputDialog.buttonClicked() button:"+button);\r
        digit = button;\r
                parent.numberPanelConfirmed();\r
@@ -138,29 +139,62 @@ public class SelectNumberPanel extends JPanel {
        private class InnerKeyListener extends KeyAdapter {\r
                @Override\r
                public void keyPressed(KeyEvent ke) {\r
-                       System.out.println("SelectMemosDialog.InnerKeyAdapter.keyPressed() ke:"+ke);\r
+                       System.out\r
+                                       .println("SelectNumberPanel  keyPressed() ke:"+ke);\r
+                       if (focusedTabPane() && isTabSelected()) {\r
+                               int code = ke.getKeyCode();\r
+                               if (code == KeyEvent.VK_L) {\r
+                                       System.out.println("NumberPanel tab selected <>HL");\r
+                                       int index = parent.getTabbedPane().getSelectedIndex();\r
+                                       int newIndex = (index == 0)?1:0;\r
+                                       System.out.println("NumberPanel tab selected index:"+index);\r
+                                       System.out.println("NumberPanel tab selected newIndex:"+newIndex);\r
+                                       parent.getTabbedPane().setSelectedIndex(newIndex);\r
+                                       parent.getTabbedPane().requestFocusInWindow();\r
+                                       return;\r
+                               }\r
+                               else if (code == KeyEvent.VK_H) {\r
+                                       return;\r
+                               }\r
+                       }\r
+                       if (!isTabSelected()) {\r
+                               return;\r
+                       }\r
                        int code = ke.getKeyCode();\r
-                       if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN) {\r
-                               if (focusedElement/3 == 0)\r
+                       if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN || code == KeyEvent.VK_J) {\r
+                               if (focusedTabPane()) {\r
+                                       focusedElement = 7;\r
+                                       btns[focusedElement].requestFocusInWindow();\r
                                        return;\r
+                               }\r
+                               if (focusedElement/3 == 0) {\r
+                                       return;\r
+                               }\r
                                focusedElement = Math.max(0, focusedElement-3);\r
                                btns[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP) {\r
-                               if (focusedElement/3 == 2)\r
+                       else if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP || code == KeyEvent.VK_K) {\r
+                               if (focusedTabPane()) {\r
+                                       return;\r
+                               }\r
+                               if (focusedElement/3 == 2) {\r
+                                       parent.getTabbedPane().requestFocusInWindow();\r
                                        return;\r
+                               }\r
                                focusedElement = Math.min(8, focusedElement+3);\r
                                btns[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT) {\r
-                               if (focusedElement%3 == 0)\r
+                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT || code == KeyEvent.VK_H) {\r
+                               if (focusedElement%3 == 0) {\r
                                        return;\r
+                               }\r
                                focusedElement = Math.max(0, focusedElement-1);\r
                                btns[focusedElement].requestFocusInWindow();\r
                        }\r
-                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT) {\r
-                               if (focusedElement%3 == 2)\r
+                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_L) {\r
+                               if (focusedElement%3 == 2) {\r
                                        return;\r
+                               }\r
                                focusedElement = Math.min(8, focusedElement+1);\r
                                btns[focusedElement].requestFocusInWindow();\r
                        }\r
@@ -169,26 +203,19 @@ public class SelectNumberPanel extends JPanel {
                        }\r
                }\r
 \r
-               @Override\r
-               public void keyReleased(KeyEvent ke) {\r
-                       System.out.println("SelectMemosDialog.InnerKeyAdapter.keyReleased() ke:"+ke);\r
-                       int code = ke.getKeyCode();\r
-                       if (code == KeyEvent.VK_SPACE) {\r
-                       }\r
-                       else if (code == KeyEvent.VK_ENTER) {\r
-                       }\r
+               private boolean focusedTabPane() {\r
+                       boolean res = parent.getTabbedPane().hasFocus();\r
+                       System.out.println("SelectNumberPanel tabbedPane focused?"+res);\r
+                       return res;\r
                }\r
 \r
-               @Override\r
-               public void keyTyped(KeyEvent ke) {\r
-                       System.out.println("SelectMemosDialog.InnerKeyAdapter.keyTyped() ke:"+ke);\r
-               }\r
        }\r
        \r
        private class InnerFocusListener extends FocusAdapter {\r
 \r
                @Override\r
                public void focusGained(FocusEvent e) {\r
+\r
                        Component comp = e.getComponent();\r
                        if (comp == btns[focusedElement]) {\r
                                return;\r
@@ -199,6 +226,10 @@ public class SelectNumberPanel extends JPanel {
                                        return;\r
                                }\r
                        }\r
+//                     if (comp == parent.getTabbedPane()) {\r
+//                             focusedElement = 7;\r
+//                             return;\r
+//                     }\r
                }\r
                \r
        }\r
index 96ebfdd..ce8c597 100644 (file)
@@ -81,7 +81,7 @@ public class SwingGrid extends JPanel implements Printable {
                this.parent = parent;
                this.view = view;
 
-               addMouseListener(this.innerMouseListener);
+               addMouseListener(innerMouseListener);
                addKeyListener(innerKeyListener);
                setPreferredSize(new Dimension(columns[columns.length - 1].getEnd()
                                - columns[0].getStart() + offX * 2,
@@ -546,28 +546,28 @@ public class SwingGrid extends JPanel implements Printable {
                        System.out.println("SwingGrid.InnerKeyAdapter.keyPressed() ke:"+ke);
                        int code = ke.getKeyCode();
                        boolean hasMoved = false;
-                       if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN) {
+                       if (code == KeyEvent.VK_KP_DOWN || code == KeyEvent.VK_DOWN || code == KeyEvent.VK_J) {
                                if (posY < 8) {
                                        posY++;
                                        hasMoved = true;
                                        repaint();
                                }
                        }
-                       else if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP) {
+                       else if (code == KeyEvent.VK_KP_UP || code == KeyEvent.VK_UP || code == KeyEvent.VK_K) {
                                if (posY > 0) {
                                        posY--;
                                        hasMoved = true;
                                        repaint();
                                }
                        }
-                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT) {
+                       else if (code == KeyEvent.VK_KP_LEFT || code == KeyEvent.VK_LEFT || code == KeyEvent.VK_H) {
                                if (posX > 0) {
                                        posX--;
                                        hasMoved = true;
                                        repaint();
                                }
                        }
-                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT) {
+                       else if (code == KeyEvent.VK_KP_RIGHT || code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_L) {
                                if (posX < 8) {
                                        posX++;
                                        hasMoved = true;
@@ -585,11 +585,11 @@ public class SwingGrid extends JPanel implements Printable {
                public void keyReleased(KeyEvent ke) {
                        System.out.println("SwingGrid.InnerKeyAdapter.keyReleased() ke:"+ke);
                        int code = ke.getKeyCode();
-                       if (code == KeyEvent.VK_SPACE) {
+                       if (code == KeyEvent.VK_SPACE || code == KeyEvent.VK_SHIFT) {
                                Point pos = getTopLeftPoint(posY, posX);
                                selectValue(posY, posX, pos.x, pos.y);
                        }
-                       else if (code == KeyEvent.VK_SHIFT) {
+                       else if (code == KeyEvent.VK_ENTER || code == KeyEvent.VK_ALT) {
                                Point pos = getTopLeftPoint(posY, posX);
                                selectMemos(posY, posX, pos.x, pos.y);
                        }