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

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

mercurial