/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.widget;
import java.awt.Color;
import java.awt.Insets;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.Hashtable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
/**
*/
public class TextField extends JTextField implements FocusListener {
/**
*
*/
private static final long serialVersionUID = 339471596367850297L;
private static Hashtable<Integer, Character> editMask = new Hashtable<Integer, Character>();
private static Color originalColor = null;
/**
* Constructor for TextField.
*
* @param mask
* String
*/
public TextField(String mask) {
super();
originalColor = this.getBackground();
this.addFocusListener(this);
this.setBorder(new EmptyBorder(new Insets(2, 2, 2, 2)));
char[] maskChars = mask.toCharArray();
for (int i = 0; i < maskChars.length; i++) {
editMask.put(new Integer(i), new Character(maskChars[i]));
}
}
/**
* Method createDefaultModel.
*
* @return Document
*/
protected Document createDefaultModel() {
TextDocument doc = new TextDocument();
/*
*
* DocumentListener d = new DocumentListener() { public void
* changedUpdate (DocumentEvent evt) { } public void insertUpdate
* (DocumentEvent evt) { } public void removeUpdate (DocumentEvent evt)
* { int i = evt.getOffset(); if (evt.getOffset() == 1 ||
* evt.getOffset() == 4) { moveCursor(evt.getOffset()); } } };
* doc.addDocumentListener(d);
*/
return doc;
}
/**
* Method getText.
*
* @return String
*/
public String getText() {
String text;
text = super.getText();
return text;
}
/**
* Method focusGained.
*
* @param evt
* FocusEvent
* @see java.awt.event.FocusListener#focusGained(FocusEvent)
*/
public void focusGained(FocusEvent evt) {
this.setSelectionStart(0);
this.setSelectionEnd(0);
}
/**
* Method focusLost.
*
* @param evt
* FocusEvent
* @see java.awt.event.FocusListener#focusLost(FocusEvent)
*/
public void focusLost(FocusEvent evt) {
if (!(isValid())) {
this.setSelectionStart(0);
this.setSelectionEnd(0);
}
}
/**
* Method isValid.
*
* @return boolean
*/
public boolean isValid() {
boolean isValid = false;
if (this.getText().trim().length() > 0) {
this.setBackground(Color.red);
isValid = true;
this.setBackground(originalColor);
} else {
isValid = true;
}
this.repaint();
return isValid;
}
/**
*
* @version $Id: TextField.java,v 1.2 2001/12/28 21:14:55 simon Exp $
* @author Simon Allen
*/
static class TextDocument extends PlainDocument {
/**
*
*/
private static final long serialVersionUID = -2258034828743548985L;
/**
* Method insertString.
*
* @param offs
* int
* @param str
* String
* @param a
* AttributeSet
* @throws BadLocationException
* @see javax.swing.text.Document#insertString(int, String,
* AttributeSet)
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (str != null) {
if (!(editMask.isEmpty())) {
Character selected = editMask.get(new Integer(offs));
if (selected != null) {
if (Character.isLetter(selected.charValue())) {
} else {
str = selected.charValue() + str;
}
} else {
return;
}
}
} else {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
Character selected = editMask.get(new Integer(offs + i));
if (selected != null) {
if (Character.isLetter(selected.charValue())) {
if (!(Character.isDigit(upper[i]))) {
return;
}
}
}
}
if (super.getLength() > offs) {
super.remove(offs, upper.length);
}
super.insertString(offs, new String(upper), a);
}
}
}