1.1 --- a/src/de/uapcore/sudoku/SudokuTextField.java Sat Jan 26 15:48:59 2013 +0100 1.2 +++ b/src/de/uapcore/sudoku/SudokuTextField.java Sat Jan 26 17:42:07 2013 +0100 1.3 @@ -13,7 +13,9 @@ 1.4 * 1.5 * @author mike 1.6 */ 1.7 -public class SudokuTextField extends JTextField { 1.8 +public final class SudokuTextField extends JTextField { 1.9 + 1.10 + private boolean modified; 1.11 1.12 public SudokuTextField() { 1.13 setBorder(null); 1.14 @@ -29,7 +31,7 @@ 1.15 1.16 addKeyListener(new KeyAdapter() { 1.17 private void handle(KeyEvent e) { 1.18 - if (getText().length() > 0) { 1.19 + if (getText().length() > 0 && getSelectedText() == null) { 1.20 int c = e.getKeyCode(); 1.21 if (c != KeyEvent.VK_DELETE && 1.22 c != KeyEvent.VK_BACK_SPACE && 1.23 @@ -40,6 +42,8 @@ 1.24 char c = e.getKeyChar(); 1.25 if (c < '0' || c > '9') { 1.26 e.consume(); 1.27 + } else { 1.28 + setModified(true); 1.29 } 1.30 } 1.31 } 1.32 @@ -68,4 +72,31 @@ 1.33 }); 1.34 } 1.35 1.36 + public int getValue() { 1.37 + if (getText().length() > 0) { 1.38 + return Integer.valueOf(getText()); 1.39 + } else { 1.40 + return 0; 1.41 + } 1.42 + } 1.43 + 1.44 + public void setValue(int v) { 1.45 + if (v == 0) { 1.46 + setText(""); 1.47 + } else if (v < 10) { 1.48 + setText(String.valueOf(v)); 1.49 + } else { 1.50 + throw new IllegalArgumentException( 1.51 + "Sudoku numbers must be in range 0-9 (0 means 'not set')"); 1.52 + } 1.53 + } 1.54 + 1.55 + public void setModified(boolean modified) { 1.56 + this.modified = modified; 1.57 + setForeground(modified?Color.BLUE:Color.BLACK); 1.58 + } 1.59 + 1.60 + public boolean isModified() { 1.61 + return modified; 1.62 + } 1.63 }