package ini.trakem2.utils; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JTextField; public final class IntegerField extends JTextField { private static final long serialVersionUID = 1L; private final int maxDigits; public IntegerField(int initial, int maxDigits) { super(); this.maxDigits = maxDigits; String text = Integer.toString(initial); if (text.length() > maxDigits) text = text.substring(0, maxDigits); setText(text); } @Override protected void processKeyEvent(KeyEvent ke) { if (0 != ke.getModifiers()) return; if (ke.getID() != KeyEvent.KEY_PRESSED) return; switch (ke.getKeyCode()) { case KeyEvent.VK_DELETE: case KeyEvent.VK_BACK_SPACE: case KeyEvent.VK_ENTER: case KeyEvent.VK_LEFT: case KeyEvent.VK_RIGHT: super.processKeyEvent(ke); for (KeyListener kl : getKeyListeners()) { kl.keyPressed(ke); } return; } // For keyPressed only: if (Character.isDigit(ke.getKeyChar())) { if (getText().length() < maxDigits) { setText(getText() + ke.getKeyChar()); for (KeyListener kl : getKeyListeners()) { kl.keyPressed(ke); } } } } @Override public String getText() { final String text = super.getText(); if (0 == text.length()) return "0"; return text; } }