Sat, 26 Jan 2013 17:42:07 +0100
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 }