2010-04-16 24 views
1

我想將一個DefaultStyledDocument插入另一個DefaultStyledDocument。我該怎麼做呢?我知道這個方法的:將一個DefaultStyledDocument插入另一個DefaultStyledDocument

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

我真正想要的是這樣的:

DefaultStyledDocument.insertDocument(int offs, 
         AbstractDocument doc) 

是否有這樣做的一種方式?

+0

你想要的是克隆你的DefaultStyleDocument? – 2010-04-20 23:43:45

+0

我想插入一個DefaultStyledDocument到另一個DefaultStyledDocument。我想將一棵樹插入另一棵樹。 – 2010-04-21 14:30:48

回答

1

您使用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); 
    }  
} 
相關問題