numberdocument.java

来自「优秀的打印控件全源代码,类似水晶表的设计器!」· Java 代码 · 共 111 行

JAVA
111
字号
/* * NumberDocument.java * * iReport  --  Visual designer for generating JasperReports Documents *  Copyright (C) 2002-2003  Giulio Toffoli gt@businesslogic.it * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program 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 General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *  Giulio Toffoli *  Via T.Aspetti, 233 *  35100 Padova ITALY *  gt@businesslogic.it * * Created on 10 febbraio 2003, 0.17 */package it.businesslogic.ireport.gui;import javax.swing.text.*;import java.text.*;/** * * @author  Administrator */public class NumberDocument extends javax.swing.text.PlainDocument {    private char groupingSeparator = ',';    private char decimalSeparator = '.';            /** Creates a new instance of NumberDocument */    public NumberDocument() {                DecimalFormatSymbols dfs = new DecimalFormatSymbols();        groupingSeparator = dfs.getGroupingSeparator();        decimalSeparator = dfs.getDecimalSeparator();     }        /** Inserts some content into the document.     * Inserting content causes a write lock to be held while the     * actual changes are taking place, followed by notification     * to the observers on the thread that grabbed the write lock.     * <p>     * This method is thread safe, although most Swing methods     * are not. Please see     * <A HREF="http://java.sun.com/products/jfc/swingdoc-archive/threads.html">Threads     * and Swing</A> for more information.     *     * @param offs the starting offset >= 0     * @param str the string to insert; does nothing with null/empty strings     * @param a the attributes for the inserted content     * @exception BadLocationException  the given insert position is not a valid     *   position within the document     * @see Document#insertString     *     */    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {        String currentText = getText(0, getLength());        String beforeOffset = currentText.substring(0, offs);        String afterOffset = currentText.substring(offs, currentText.length());        String proposedResult = beforeOffset + str + afterOffset;        proposedResult = proposedResult.replaceAll("\\"+groupingSeparator+"","");        proposedResult = proposedResult.replace(decimalSeparator, '.');                try {            //Number n = format.parse(proposedResult);            Double.parseDouble(proposedResult);                        super.insertString(offs, str, a);        } catch (NumberFormatException e) {            //System.err.println("insertString: could not parse: "            //                   + proposedResult);        }            }         public void remove(int offs, int len) throws BadLocationException {        String currentText = getText(0, getLength());        String beforeOffset = currentText.substring(0, offs);        String afterOffset = currentText.substring(len + offs,                                                   currentText.length());        String proposedResult = beforeOffset + afterOffset;        proposedResult = proposedResult.replaceAll("\\"+groupingSeparator+"","");        proposedResult = proposedResult.replace(decimalSeparator, '.');               try {            //Number n = format.parse(proposedResult);           if (proposedResult.length() != 0)                Double.parseDouble(proposedResult);                        super.remove(offs, len);        } catch (NumberFormatException e) {           // System.err.println("remove: could not parse: " + proposedResult);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?