package com.c2kernel.gui.tabs.outcome.form.field; import java.awt.Toolkit; import java.math.BigDecimal; import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.JTextComponent; import javax.swing.text.PlainDocument; /************************************************************************** * * $Revision: 1.3 $ * $Date: 2005/08/16 13:59:56 $ * * Copyright (C) 2003 CERN - European Organization for Nuclear Research * All rights reserved. **************************************************************************/ public class DecimalEditField extends StringEditField { public DecimalEditField() { super(); field.addFocusListener(this); field.setToolTipText("This field must contains a decimal number e.g. 3.14159265"); } public String getText() { return field.getText(); } public void setText(String text) { field.setText(text); } public String getDefaultValue() { return "0.0"; } public JTextComponent makeTextField() { return new DecimalTextField(); } private class DecimalTextField extends JTextField { public DecimalTextField() { super(); setHorizontalAlignment(RIGHT); } protected Document createDefaultModel() { return new Decimal(); } } private class Decimal extends PlainDocument { BigDecimal currentVal = new BigDecimal(0.0); public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null || str.equals("")) { return; } String proposedResult = null; if (getLength() == 0) { proposedResult = str; } else { StringBuffer currentBuffer = new StringBuffer( this.getText(0, getLength()) ); currentBuffer.insert(offs, str); proposedResult = currentBuffer.toString(); } try { currentVal = parse(proposedResult); super.insertString(offs, str, a); } catch (Exception e) { Toolkit.getDefaultToolkit().beep(); } } public void remove(int offs, int len) throws BadLocationException { String currentText = this.getText(0, getLength()); String beforeOffset = currentText.substring(0, offs); String afterOffset = currentText.substring(len + offs, currentText.length()); String proposedResult = beforeOffset + afterOffset; if (proposedResult.length() == 0) { // empty is ok super.remove(offs, len); return; } try { currentVal = parse(proposedResult); super.remove(offs, len); } catch (Exception e) { Toolkit.getDefaultToolkit().beep(); } } public BigDecimal parse(String proposedResult) throws NumberFormatException { BigDecimal value = new BigDecimal(0); if ( proposedResult.length() != 0) { value = new BigDecimal(proposedResult); } return value; } } }