Frage

Wie bearbeite ich den Stil des ausgewählten Textes einfach in einer jTextPane? Es scheint nicht viele Ressourcen dazu zu geben. Selbst wenn Sie mich zu einer guten Ressource dazu bringen können, würde ich es sehr schätzen.

Wie bekomme ich den aktuellen Stil des ausgewählten Textes? Ich habe es versucht styledDoc.getLogicalStyle(textPane.getSelectionStart()); Aber es scheint nicht zu funktionieren.

War es hilfreich?

Lösung

Schauen Sie sich den folgenden Code in diesem Pastebin an:

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

Das Beispiel ist von hier:

http://www.java2s.com/code/java/swing-jfc/jtextpanestysexample3.htm

Es sieht so aus, als ob Sie den Stil mit Folgendem in einem Action -Listener ändern können:

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

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

Es setzt den Stil des Textes zwischen dem gegebenen Versatz und der Länge in einen bestimmten Stil.

Weitere Informationen finden Sie im vollständigen Pastebin. Das sollte Ihr Problem jedoch beheben.

Andere Tipps

Hier ist ein Code -Snippet zum Einfügen eines formatierten "Hello World!" Zeichenfolge in a 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);

Der einfachste Weg, Textpaneele zu manipulieren, ist die Verwendung Herausgeber -Kits und ihre damit verbundenen Aktionen. Sie können eine Demo davon in der finden JDK Proben (unter Jdk Demo jfc stylepad).

Beispielcode, der a installiert StyledEditorkit und verwendet a FontsizeAction Um den Text zu manipulieren:

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

(Tipp: Wenn Sie a verwenden möchten Fontfamilie, schauen Sie sich an Graphicsumvironment.GetAVailableFontfamilyNamnames () und Logische Schriftfamiliennamen.)

Ich würde empfehlen, sich die Sonne anzusehen Java -Tutorial Über Herausgeber.

Ok, wow. Schwere Frage. Ich habe also keinen Weg gefunden, den Stil eines bestimmten Charakters zu bekommen. Sie können jedoch den Mutableattributeset für einen bestimmten Charakter erhalten und dann testen, ob sich der Stil in diesem Attributsatz befindet.

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

Ein Problem beim Erhalten des Stils für eine Reihe von Charakteren ist, dass möglicherweise mehr als ein Stil für diesen Bereich angewendet wird (Beispiel: Sie können Text auswählen, bei dem einige fett sind und einige nicht).

So aktualisieren Sie den ausgewählten Text, den Sie können:

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

Oh, und es scheint, dass die Funktion getlogicalstyle nicht funktioniert, da sie den Standardstil (oder vielleicht nur den Stil) für den Absatz zurückgibt, der P enthält, und nicht den Stil des Charakters auf P.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top