2010-04-16 7 views
1

Je souhaite insérer un DefaultStyledDocument dans un autre DefaultStyledDocument. Comment puis-je faire cela? Je sais de cette méthode:Insérer un DefaultStyledDocument dans un autre DefaultStyledDocument

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

Ce que je veux vraiment quelque chose comme ceci:

DefaultStyledDocument.insertDocument(int offs, 
         AbstractDocument doc) 

Est-il possible de le faire?

+0

ce que vous voulez est de cloner votre DefaultStyleDocument? –

+0

Je souhaite insérer un DefaultStyledDocument dans un autre DefaultStyledDocument. Je veux insérer un arbre dans un autre arbre. –

Répondre

1

Vous utilisez PlainDocument à l'aide de JTextField | JTextArea

Exemple

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