src/de/uapcore/sudoku/SudokuTextField.java

changeset 2
5179eff8a9b6
parent 1
f1d7de36b01e
child 3
ed931970b4ac
     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  }

mercurial