Comment puis-je modifier facilement le style du texte sélectionné dans un JTextPane?

StackOverflow https://stackoverflow.com/questions/766396

  •  12-09-2019
  •  | 
  •  

Question

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écie grandement.

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

Était-ce utile?

La solution

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 ce qui suit dans un écouteur 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 donné et la longueur à un style spécifique.

Voir la pleine pastebin pour plus de détails. Cela devrait résoudre votre problème cependant.

Autres conseils

Voici un extrait de code à insérer un formaté « Bonjour tout le monde! » chaîne dans une 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);

La meilleure façon de manipuler des panneaux de texte utilise EditorKit et leur associé actions . Vous pouvez trouver une démo de ce dans les échantillons 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 souhaitez utiliser un FontFamilyAction , jetez un oeil à GraphicsEnvironment.getAvailableFontFamilyNames () et Les noms de famille de polices logiques .)

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

Ok, wow. Question difficile. Donc, je ne l'ai pas trouvé un moyen d'obtenir le style d'un caractère donné. Vous pouvez cependant obtenir le MutableAttributeSet pour un caractère donné et puis testez pour voir si le style est dans ce jeu 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 à 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 caractère à la p.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top