src/de/uapcore/sudoku/SudokuTextField.java

Sat, 26 Jan 2013 17:42:07 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 26 Jan 2013 17:42:07 +0100
changeset 2
5179eff8a9b6
parent 1
f1d7de36b01e
child 3
ed931970b4ac
permissions
-rw-r--r--

check functions

     1 package de.uapcore.sudoku;
     3 import java.awt.Color;
     4 import java.awt.Dimension;
     5 import java.awt.Font;
     6 import java.awt.event.FocusAdapter;
     7 import java.awt.event.FocusEvent;
     8 import java.awt.event.KeyAdapter;
     9 import java.awt.event.KeyEvent;
    10 import javax.swing.JTextField;
    12 /**
    13  *
    14  * @author mike
    15  */
    16 public final class SudokuTextField extends JTextField {
    18     private boolean modified;
    20     public SudokuTextField() {
    21         setBorder(null);
    22         setBackground(Color.WHITE);
    24         setFont(new Font("Dialog", Font.PLAIN, 18));
    25         setHorizontalAlignment(JTextField.CENTER);
    27         Dimension dim = new Dimension(40,40);
    28         setPreferredSize(dim);
    29         setMinimumSize(dim);
    30         setMaximumSize(dim);
    32         addKeyListener(new KeyAdapter() {
    33             private void handle(KeyEvent e) {
    34                 if (getText().length() > 0 && getSelectedText() == null) {
    35                     int c = e.getKeyCode();
    36                     if (c != KeyEvent.VK_DELETE &&
    37                             c != KeyEvent.VK_BACK_SPACE &&
    38                             !e.isActionKey()) {
    39                         e.consume();
    40                     }
    41                 } else {
    42                     char c = e.getKeyChar();
    43                     if (c < '0' || c > '9') {
    44                         e.consume();
    45                     } else {
    46                         setModified(true);
    47                     }
    48                 }
    49             }
    51             @Override
    52             public void keyPressed(KeyEvent e) {
    53                 handle(e);
    54             }
    56             @Override
    57             public void keyTyped(KeyEvent e) {
    58                 handle(e);
    59             }
    61             @Override
    62             public void keyReleased(KeyEvent e) {
    63                 handle(e);
    64             }
    66         });
    67         addFocusListener(new FocusAdapter() {
    68             @Override
    69             public void focusGained(FocusEvent e) {
    70                 selectAll();
    71             }
    72         });
    73     }
    75     public int getValue() {
    76         if (getText().length() > 0) {
    77             return Integer.valueOf(getText());
    78         } else {
    79             return 0;
    80         }
    81     }
    83     public void setValue(int v) {
    84         if (v == 0) {
    85             setText("");
    86         } else if (v < 10) {
    87             setText(String.valueOf(v));
    88         } else {
    89             throw new IllegalArgumentException(
    90                     "Sudoku numbers must be in range 0-9 (0 means 'not set')");
    91         }
    92     }
    94     public void setModified(boolean modified) {
    95         this.modified = modified;
    96         setForeground(modified?Color.BLUE:Color.BLACK);
    97     }
    99     public boolean isModified() {
   100         return modified;
   101     }
   102 }

mercurial