src/de/uapcore/sudoku/SudokuTextField.java

changeset 3
ed931970b4ac
parent 2
5179eff8a9b6
child 4
b8588e318001
--- a/src/de/uapcore/sudoku/SudokuTextField.java	Sat Jan 26 17:42:07 2013 +0100
+++ b/src/de/uapcore/sudoku/SudokuTextField.java	Sat Jan 26 18:38:12 2013 +0100
@@ -1,3 +1,29 @@
+/*
+ * Copyright 2013 Mike Becker. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
 package de.uapcore.sudoku;
 
 import java.awt.Color;
@@ -31,19 +57,23 @@
         
         addKeyListener(new KeyAdapter() {
             private void handle(KeyEvent e) {
-                if (getText().length() > 0 && getSelectedText() == null) {
-                    int c = e.getKeyCode();
-                    if (c != KeyEvent.VK_DELETE &&
-                            c != KeyEvent.VK_BACK_SPACE &&
-                            !e.isActionKey()) {
+                char c = e.getKeyChar();
+                if (!e.isAltDown() && !e.isControlDown() &&
+                        Character.isLetterOrDigit(c)) {
+                    // Perform clean input check
+                    if (getText().length() > 0 && getSelectedText() == null) {
                         e.consume();
+                    } else {
+                        if (c < '1' || c > '9') {
+                            e.consume();
+                        } else {
+                            setModified(true);
+                        }
                     }
                 } else {
-                    char c = e.getKeyChar();
-                    if (c < '0' || c > '9') {
-                        e.consume();
-                    } else {
-                        setModified(true);
+                    // We can still be tricked by hotkeys, so do it the hard way
+                    if (!getText().matches("^[1-9]$")) {
+                        setText("");
                     }
                 }
             }

mercurial