2009-04-19 14 views

risposta

2

Date un'occhiata al seguente codice in questo pastebin:

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

L'esempio da qui:

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

Sembra che si può modificare lo stile utilizzando la seguente in un listener di azioni:

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

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

Imposta lo stile del testo tra l'offset e la lunghezza specificati in uno stile specifico.

Vedere il pastebin completo per ulteriori dettagli. Questo dovrebbe risolvere il tuo problema però.

+0

Ho appena visitato il link java2s e wow, molti esempi. – extraneon

0

Si consiglia di dare un'occhiata a Sun's Java Tutorial sui riquadri di editor.

3

Ecco uno snippet di codice per inserire un "Hello World!" Formattato stringa in 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

Non so perché questo è stato rifiutato perché è la risposta più corretta qui! –

0

Ok, wow. Domanda difficile. Quindi non ho trovato un modo per ottenere lo stile di un determinato personaggio. Tuttavia, è possibile ottenere il MutableAttributeSet per un determinato carattere e quindi verificare se lo stile si trova in quel set di attributi.

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

Un problema con ottenere lo stile per una serie di caratteri è che ci possono essere più di uno stile applicato a tale intervallo (ad esempio: è possibile selezionare il testo in cui alcuni è audace e alcuni non è).

Per aggiornare il testo selezionato è possibile:

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

Oh, e sembra che la funzione getLogicalStyle non funziona perché è il ritorno allo stile di default (o forse solo lo stile) per il paragrafo che contiene p, piuttosto che lo stile del personaggio in p.

2

Il modo più semplice per manipolare i pannelli di testo è l'utilizzo di editor kits e dei relativi actions associati. Puoi trovare una demo di questo nei campioni JDK (sotto jdk \ demo \ jfc \ Stylepad).

codice di esempio che installa un StyledEditorKit e utilizza un FontSizeAction per manipolare il testo:

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

(Suggerimento:. Se si desidera utilizzare un FontFamilyAction, dare un'occhiata a GraphicsEnvironment.getAvailableFontFamilyNames() e logical font family names)

+0

Buon esempio, ma ho una domanda. Come ottengo il testo con stile e come posso salvare questo testo con stile in un database? – Krismorte

Problemi correlati