2009-04-19 8 views
6

Wie bearbeite ich einfach den Stil des ausgewählten Textes in einem 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 bearbeite ich einfach den Stil des ausgewählten Textes in einem JTextPane?

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

Antwort

2

in diesem Pastebin einen Blick auf den folgenden Code nehmen:

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

Das Beispiel hier ist:

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

Es sieht aus wie Sie den Stil der folgende Verwendung ändern in einem Aktions-Listener:

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

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

Es legt den Stil des Textes zwischen dem angegebenen Offset und der Länge für einen bestimmten Stil fest.

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

+0

Ich besuchte gerade den java2s Link und wow, viele Beispiele. – extraneon

0

Ich würde empfehlen, einen Blick auf Sun Java Tutorial über Editor-Fenster.

3

Hier ist ein Code-Snippet zum Einfügen eines formatierten "Hallo Welt!" string in einem 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

Ich weiß nicht, warum das abgelehnt wurde, weil es die richtige Antwort hier ist! –

0

Ok, wow. Schwere Frage. Also habe ich keinen Weg gefunden, den Stil eines bestimmten Charakters zu erhalten. Sie können jedoch das MutableAttributeSet für ein bestimmtes Zeichen abrufen und dann testen, um festzustellen, ob der Stil in diesem Attributsatz enthalten ist.

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

Ein Problem, mit dem Stil für eine Reihe von Zeichen bekommen ist, dass es mehr als ein Stil auf diesen Bereich angewandt wird (Beispiel: Sie können Text auswählen, in dem einige fett sind und einige nicht).

den ausgewählten Text aktualisieren können Sie:

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

Oh, und es scheint, dass die Funktion getLogicalStyle nicht funktioniert, weil es den Standardstil (oder vielleicht auch nur der Stil) für den Absatz der Rückkehr ist, die enthält p, anstatt den Stil des Charakters bei p.

2

Die einfachste Art, Textfelder zu bearbeiten, ist die Verwendung von editor kits und der zugehörigen actions. Sie können eine Demo davon in den JDK Proben finden (unter jdk \ demo \ jfc \ Stylepad).

Beispielcode, der eine StyledEditorKit installiert und verwendet einen FontSizeAction 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 einen FontFamilyAction verwenden möchten, haben Sie einen Blick auf GraphicsEnvironment.getAvailableFontFamilyNames() und logical font family names)

+0

Gutes Beispiel, aber ich habe eine Frage. Wie bekomme ich den Text mit Stil und wie kann man diesen Text mit Stil in einer Datenbank speichern? – Krismorte

Verwandte Themen