Package org.tomighty.ui.util

Source Code of org.tomighty.ui.util.FieldFactory$FieldListener

/*
* Copyright (c) 2010-2012 Célio Cidral Junior.
*
*     Licensed under the Apache License, Version 2.0 (the "License");
*     you may not use this file except in compliance with the License.
*     You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
*     Unless required by applicable law or agreed to in writing, software
*     distributed under the License is distributed on an "AS IS" BASIS,
*     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*     See the License for the specific language governing permissions and
*     limitations under the License.
*/

package org.tomighty.ui.util;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.JTextField;
import javax.swing.text.NumberFormatter;

public class FieldFactory {
 
  public static JFormattedTextField createIntegerField(int minValue, int maxLength) {
    IntegerFormatter formatter = new IntegerFormatter(minValue);
    JFormattedTextField field = new JFormattedTextField(formatter);
    field.setHorizontalAlignment(JTextField.CENTER);
    field.addKeyListener(new FieldListener(maxLength));
    return field;
  }
 
  @SuppressWarnings("serial")
  private static class IntegerFormatter extends AbstractFormatter {
   
    private final int minValue;
    private final NumberFormatter numberFormatter;

    public IntegerFormatter(int minValue) {
      this.minValue = minValue;
      numberFormatter = new NumberFormatter(NumberFormat.getIntegerInstance());
    }

    @Override
    public Object stringToValue(String text) throws ParseException {
      Number value = (Number) numberFormatter.stringToValue(text);
      if (value.intValue() < minValue) {
        throw new ParseException("Value cannot be less than "+minValue, 0);
      }
      return value;
    }

    @Override
    public String valueToString(Object value) throws ParseException {
      return numberFormatter.valueToString(value);
    }
   
  }
 
  private static class FieldListener extends KeyAdapter {
   
    private final int maxLength;

    public FieldListener(int maxLength) {
      this.maxLength = maxLength;
    }

    @Override
    public void keyTyped(KeyEvent e) {
      if(!Character.isDigit(e.getKeyChar())) {
        e.consume();
        return;
      }
      JTextField field = (JTextField) e.getSource();
      String text = field.getText();
      if(text == null) return;
      boolean reachedMaxLength = text.length() >= maxLength;
      boolean noTextSelected = field.getSelectedText() == null;
      if(reachedMaxLength && noTextSelected) {
        e.consume();
      }
    }
   
  }

}
TOP

Related Classes of org.tomighty.ui.util.FieldFactory$FieldListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.