一个DefaultStyledDocument

一个DefaultStyledDocument

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

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


我真正想要的是这样的:

DefaultStyledDocument.insertDocument(int offs,
                         AbstractDocument doc)


有办法吗?

最佳答案

您可以将PlainDocument用于JTextField。 JTextArea



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);
    }
}

08-06 04:54