开发者

Insert one DefaultStyledDocument into another DefaultStyledDocument

I want to insert one DefaultStyledDocument into another DefaultStyledDocument. H开发者_开发技巧ow do I do this? I know of this method:

AbstractDocument.insertString(int offs,
                         String str,
                         AttributeSet a)

What I really want is something like this:

DefaultStyledDocument.insertDocument(int offs,
                         AbstractDocument doc)

Is there a way of doing this?


You use the PlainDocument using for JTextField | JTextArea

Example

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

@SuppressWarnings("serial")
public class UserPlainDocument extends PlainDocument {

    private final int LIMIT_OF_CHARS;
    private final int DATA_TYPE;
    private final char[] SKIPPING_CHARS;

    public final static int ALL_DATA_TYPES = 1;
    public final static int DATA_TYPE_OF_INTEGER = 2;
    public final static int DATA_TYPE_OF_DOUBLE = 3; 

    public UserPlainDocument(int limitOfChars, int dataType) {
        if(4 < dataType || 0 > dataType) throw new IllegalArgumentException(
               "This dataType value not available " +
               "please check the value.");          
        this.LIMIT_OF_CHARS = limitOfChars;
        this.DATA_TYPE = dataType;
        this.SKIPPING_CHARS = null;
    }

    public UserPlainDocument(int limitOfChars, char[] skippingChars) {
        this.LIMIT_OF_CHARS = limitOfChars;
        this.SKIPPING_CHARS = skippingChars;
        this.DATA_TYPE = 0;
    }

    @Override
    public void insertString(int offs, String charAt, AttributeSet set)
            throws BadLocationException {
        if(offs + charAt.length() <= LIMIT_OF_CHARS)
            try {
                switch (DATA_TYPE) {
                    case DATA_TYPE_OF_INTEGER:
                        Integer.parseInt(charAt);
                        super.insertString(offs, charAt, set);
                        break;

                    case DATA_TYPE_OF_DOUBLE:
                        if(charAt.equals(".") && getText(0, offs).
                          indexOf(".") == -1) {
                            super.insertString(offs, charAt, set);
                            break;
                        }
                        Double.parseDouble(charAt);
                        super.insertString(offs, charAt, set);
                        break;

                    case ALL_DATA_TYPES:
                        super.insertString(offs, charAt, set);
                        break;

                    default:
                        for (int i = 0; i < SKIPPING_CHARS.length; i++) 
                            if(charAt.equals(String.valueOf(SKIPPING_CHARS[i])))  
                                throw new BadLocationException("", offs);

                        super.insertString(offs, charAt, set);
                        break;

                }
            } catch (NumberFormatException e) {
                throw new BadLocationException(e.getMessage(), offs); 
            }
        else
            throw new BadLocationException("", offs);
    }       
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜