001/* ======================================================================== 002 * JCommon : a free general purpose class library for the Java(tm) platform 003 * ======================================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jcommon/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * --------------------------- 028 * LengthLimitingDocument.java 029 * --------------------------- 030 * (C)opyright 2003, 2004, by Thomas Morgner and Contributors. 031 * 032 * Original Author: Thomas Morgner; 033 * Contributor(s): David Gilbert (for Object Refinery Limited); 034 * 035 * $Id: LengthLimitingDocument.java,v 1.3 2005/10/18 13:18:34 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 22-Jan-2003 : Initial version 040 * 05-Feb-2003 : Documentation 041 * 042 */ 043 044package org.jfree.ui; 045 046import javax.swing.text.AttributeSet; 047import javax.swing.text.BadLocationException; 048import javax.swing.text.PlainDocument; 049 050/** 051 * This Document restricts the size of the contained plain text to the given number of 052 * characters. 053 * 054 * @author Thomas Morgner 055 */ 056public class LengthLimitingDocument extends PlainDocument { 057 058 /** The maximum length. */ 059 private int maxlen; 060 061 /** 062 * Creates a new LengthLimitingDocument, with no limitation. 063 */ 064 public LengthLimitingDocument() { 065 this(-1); 066 } 067 068 /** 069 * Creates a new LengthLimitingDocument with the given limitation. No more than 070 * maxlen characters can be added to the document. If maxlen is negative, then 071 * no length check is performed. 072 * 073 * @param maxlen the maximum number of elements in this document 074 */ 075 public LengthLimitingDocument(final int maxlen) { 076 super(); 077 this.maxlen = maxlen; 078 } 079 080 /** 081 * Sets the maximum number of characters for this document. Existing characters 082 * are not removed. 083 * 084 * @param maxlen the maximum number of characters in this document. 085 */ 086 public void setMaxLength(final int maxlen) { 087 this.maxlen = maxlen; 088 } 089 090 /** 091 * Returns the defined maximum number characters for this document. 092 * @return the maximum number of characters 093 */ 094 public int getMaxLength() { 095 return this.maxlen; 096 } 097 098 /** 099 * Inserts the string into the document. If the length of the document would 100 * violate the maximum characters restriction, then the string is cut down so 101 * that 102 * @param offs the offset, where the string should be inserted into the document 103 * @param str the string that should be inserted 104 * @param a the attribute set assigned for the document 105 * @throws javax.swing.text.BadLocationException if the offset is not correct 106 */ 107 public void insertString(final int offs, final String str, final AttributeSet a) 108 throws BadLocationException { 109 if (str == null) { 110 return; 111 } 112 113 if (this.maxlen < 0) { 114 super.insertString(offs, str, a); 115 } 116 117 final char[] numeric = str.toCharArray(); 118 final StringBuffer b = new StringBuffer(); 119 b.append(numeric, 0, Math.min(this.maxlen, numeric.length)); 120 super.insertString(offs, b.toString(), a); 121 } 122 123}