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