package org.geogebra.desktop.gui.inputfield; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.text.DateFormat; import javax.swing.JFormattedTextField; import org.geogebra.common.gui.VirtualKeyboardListener; import org.geogebra.desktop.gui.GuiManagerD; import org.geogebra.desktop.gui.virtualkeyboard.VirtualKeyboardD; public class MyFormattedTextField extends JFormattedTextField implements FocusListener, VirtualKeyboardListener { private static final long serialVersionUID = 1L; GuiManagerD guiManager; public MyFormattedTextField(GuiManagerD guiManager) { super(); this.guiManager = guiManager; addFocusListener(this); } public MyFormattedTextField(GuiManagerD guiManager, DateFormat date) { super(date); this.guiManager = guiManager; addFocusListener(this); } @Override public void focusGained(FocusEvent e) { guiManager.setCurrentTextfield(this, false); } @Override public void focusLost(FocusEvent e) { guiManager.setCurrentTextfield(null, !(e.getOppositeComponent() instanceof VirtualKeyboardD)); } @Override public void insertString(String text) { int start = getSelectionStart(); int end = getSelectionEnd(); // clear selection if there is one if (start != end) { int pos = getCaretPosition(); String oldText = getText(); StringBuilder sb = new StringBuilder(); sb.append(oldText.substring(0, start)); sb.append(oldText.substring(end)); setText(sb.toString()); if (pos < sb.length()) { setCaretPosition(pos); } } int pos = getCaretPosition(); String oldText = getText(); StringBuilder sb = new StringBuilder(); sb.append(oldText.substring(0, pos)); sb.append(text); sb.append(oldText.substring(pos)); setText(sb.toString()); setCaretPosition(pos + text.length()); } }