Partage
  • Partager sur Facebook
  • Partager sur Twitter

JTextPane - modifier des styles

modification de style sur un caractère

Sujet résolu
    25 janvier 2012 à 9:48:17

    Bonjour a tous.

    J'ai un problème et je vais vous l'expliquer :
    Actuellement, je dois créer un éditeur de texte en java. Je m'en sors pas trop mal, mais je suis confronté à un problème :

    Je n'arrive pas à modifier le style de mes caractères comme je le voudrais.
    J'utilise donc un JTextPane. Je modifie le style avec des setCharacterAttributes(), et je récupère l'ancien style que je leur ai appliqué avec des getCharacterAttributes().
    Je vais vous expliquer ce qu'il ne va pas :
    Quand je sélectionne mon texte de Gauche à Droite, je n'arrive pas à appliquer plusieurs styles à mon texte sélectionné (soit gras, soit italique, soit souligné, mas jamais en même temps).
    En revanche, quand je sélectionne un texte de Droite à Gauche, la ça marche. Je peux appliquer tous les styles que je veux à mon texte sélectionné.

    comme je l'ai dit précédemment, j'utilise la méthode getCharacterAttributes(), qui se base sur la position du curseur.
    Je pense simplement que le problème vient de la : quand je sélectionne de Gauche à Droite, le curseur se place à la fin du texte.

    Mais pourquoi est-ce que cela entraine un problème?
    Ce que je vous demande, c'est de me dire d'ou pourrait éventuellement venir le problème, et éventuellement de me dire comment je pourrais le corriger. Je n'y arrive vraiment plus, je ne sais vraiment plus quoi faire (au moins 6h de recherche et de test sans résultat satisfaisant...)

    voici mon code, c'est toujours utile:

    public void actionPerformed(ActionEvent e) {  
            this.document=textPaneTexte.getStyledDocument();
            
            String textSelect = textPaneTexte.getSelectedText();
            int positionStart = this.textPaneTexte.getSelectionStart();
            int positionEnd = this.textPaneTexte.getSelectionEnd();
            
            this.style=this.document.getLogicalStyle(textPaneTexte.getCaretPosition());        
            
            System.out.println(positionStart+"-"+positionEnd+"--"+textPaneTexte.getCaretPosition());
    
            if(this.textPaneTexte.getCaretPosition() == positionEnd) {
                //this.textPaneTexte.setCaretPosition(positionStart);
                //this.textPaneTexte.select(positionEnd,positionStart);
                System.out.println(this.textPaneTexte.getSelectedText());
            }
            
            this.attributes = new SimpleAttributeSet(this.textPaneTexte.getCharacterAttributes());
           
            System.out.println(textPaneTexte.getSelectionStart()+"-"+textPaneTexte.getSelectionEnd()+"--"+textPaneTexte.getCaretPosition());
            
            System.out.println("avant update");
            for (Enumeration en = this.attributes.getAttributeNames(); en.hasMoreElements()  {
                System.out.println(en.nextElement());
            }
                    //JPane.getStyleDocument().setCharacterAttributes(debut,longueur,attribut_pasgras,true)
    
            if(e.getSource() == this.buttonTextAlignLeft) {
                StyleConstants.setAlignment(this.style, StyleConstants.ALIGN_LEFT);
            }
            else if(e.getSource() == this.buttonTextAlignCenter) {
                StyleConstants.setAlignment(this.style, StyleConstants.ALIGN_CENTER);
            }
            else if(e.getSource() == this.buttonTextAlignRight) {
                StyleConstants.setAlignment(this.style, StyleConstants.ALIGN_RIGHT);
            }
            else if(e.getSource() == this.buttonTextAlignJustify) {
                StyleConstants.setAlignment(this.style, StyleConstants.ALIGN_JUSTIFIED);
            }
            else if(e.getSource() == this.buttonTextBold) {
                if(StyleConstants.isBold(this.attributes))
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.FALSE);
                else
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
            }
            else if(e.getSource() == this.buttonTextItalic) {
                if(StyleConstants.isItalic(this.attributes))
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.FALSE);
                else
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE);
            }
            else if(e.getSource() == this.buttonTextUnderline) {
                if(StyleConstants.isUnderline(this.attributes))
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Underline, Boolean.FALSE);
                else
                    this.attributes.addAttribute(StyleConstants.CharacterConstants.Underline, Boolean.TRUE);
            }
            else if(e.getSource() == this.comboBoxPolice) {
                StyleConstants.setFontFamily(this.style, (String)this.comboBoxPolice.getSelectedItem());
            }
            else if(e.getSource() == this.comboBoxTailleTexte) {
                StyleConstants.setFontSize(this.style, Integer.parseInt((String)this.comboBoxTailleTexte.getSelectedItem()));
            }
            
            this.textTampon = textSelect;
            this.previousPosition = positionStart;
            
            
            
            this.textPaneTexte.setCharacterAttributes(attributes, true);
    
            System.out.println("fin\napres update:");
            for (Enumeration en = this.attributes.getAttributeNames(); en.hasMoreElements()  {
                System.out.println(en.nextElement());
            }
    
            
            
        }
    


    Merci d'avance.

    Cordialement
    • Partager sur Facebook
    • Partager sur Twitter

    JTextPane - modifier des styles

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown