2009-04-19 7 views
6

Comment modifier facilement le style du texte sélectionné dans un JTextPane? Il ne semble pas y avoir beaucoup de ressources à ce sujet. Même si vous pouvez me diriger vers une bonne ressource à ce sujet, je l'apprécierais grandement.Comment modifier facilement le style du texte sélectionné dans un JTextPane?

De plus, comment obtenir le style actuel du texte sélectionné? J'ai essayé styledDoc.getLogicalStyle(textPane.getSelectionStart()); mais il ne semble pas fonctionner.

Répondre

2

Jetez un oeil sur le code suivant dans ce pastebin:

http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52aa951ca15762ed3d3

L'exemple est d'ici:

http://www.java2s.com/Code/Java/Swing-JFC/JTextPaneStylesExample3.htm

Il semble que vous pouvez changer le style en utilisant les éléments suivants dans une prise d'action:

final Style boldStyle = sc.addStyle("MainStyle", defaultStyle); 
StyleConstants.setBold(boldStyle, true); 

doc.setCharacterAttributes(0, 10, boldStyle, true); 

Il définit le style du texte entre le décalage et la longueur donnés à un style spécifique.

Voir le pastebin complet pour plus de détails. Cela devrait résoudre votre problème.

+0

Je viens de visiter le lien java2s et wow, beaucoup d'exemples. – extraneon

0

Je vous recommande de jeter un oeil à Java Tutorial de Sun sur les volets de l'éditeur.

3

Voici un extrait de code pour insérer un "Hello World!" Formaté. chaîne dans un JEditorPane:

Document doc = yourEditorPane.getDocument(); 

StyleContext sc = new StyleContext(); 
Style style = sc.addStyle("yourStyle", null); 

Font font = new Font("Arial", Font.BOLD, 18); 

StyleConstants.setForeground(style, Color.RED); 
StyleConstants.setFontFamily(style, font.getFamily()); 
StyleConstants.setBold(style, true); 

doc.insertString(doc.getLength(), "Hello World!", style); 
+0

Je ne sais pas pourquoi cela a été décliné parce que c'est la réponse la plus correcte ici! –

0

Ok, wow. Question difficile. Donc, je n'ai pas trouvé un moyen d'obtenir le style d'un personnage donné. Vous pouvez, cependant, obtenir le MutableAttributeSet pour un caractère donné, puis tester pour voir si le style est dans cet ensemble d'attributs.

Style s; //your style 
    Element run = styledDocument.getCharacterElement( 
     textPane.getSelectionStart()); 
    MutableAttributeSet curAttr = 
     (MutableAttributeSet)run.getAttributes(); 
    boolean containsIt = curAttr.containsAttributes(s); 

Un problème avec obtenir le style pour une série de caractères est qu'il peut y avoir plus d'un style appliqué à cette gamme (exemple: vous pouvez sélectionner du texte où certains est gras et certains n'est pas).

Pour mettre à jour le texte sélectionné, vous pouvez:

Style s; //your style 
    JTextPane textPane; //your textpane 
    textPane.setCharacterAttributes(s, false); 

Oh, et il semble que la fonction getLogicalStyle ne fonctionne pas parce qu'il est de retour le style par défaut (ou peut-être juste le style) pour le paragraphe qui contient p, plutôt que le style du personnage à la p.

2

La façon la plus simple de manipuler les panneaux de texte est d'utiliser editor kits et leurs actions associés. Vous pouvez trouver une démonstration de ceci dans les exemples JDK (sous jdk \ demo \ jfc \ Stylepad).

Exemple de code qui installe un StyledEditorKit et utilise un FontSizeAction pour manipuler le texte:

public static void main(String[] args) { 
    // create a rich text pane 
    JTextPane textPane = new JTextPane(); 
    JScrollPane scrollPane = new JScrollPane(textPane, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    // install the editor kit 
    StyledEditorKit editorKit = new StyledEditorKit(); 
    textPane.setEditorKit(editorKit); 
    // build the menu 
    JMenu fontMenu = new JMenu("Font Size"); 
    for (int i = 48; i >= 8; i -= 10) { 
     JMenuItem menuItem = new JMenuItem("" + i); 
     // add an action 
     menuItem 
      .addActionListener(new StyledEditorKit.FontSizeAction(
       "myaction-" + i, i)); 
     fontMenu.add(menuItem); 
    } 
    JMenuBar menuBar = new JMenuBar(); 
    menuBar.add(fontMenu); 
    // show in a frame 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(600, 400); 
    frame.setJMenuBar(menuBar); 
    frame.setContentPane(scrollPane); 
    frame.setVisible(true); 
    } 

(Astuce:. Si vous voulez utiliser un FontFamilyAction, jetez un oeil à GraphicsEnvironment.getAvailableFontFamilyNames() et logical font family names)

+0

Bon exemple, mais j'ai une question. Comment puis-je obtenir le texte avec style et comment un peut enregistrer ce texte avec style dans une base de données? – Krismorte

Questions connexes