1

我想将一个DefaultStyledDocument插入另一个DefaultStyledDocument。我该怎么做呢?我知道这种方法:

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

我真正想要的是这样的:

DefaultStyledDocument.insertDocument(int offs,
                         AbstractDocument doc)

有没有办法做到这一点?

4

1 回答 1

1

您将 PlainDocument 用于 JTextField | 文本区域

例子

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);
    }       
}
于 2011-08-07T01:50:30.047 回答