2013-03-24 3 views
1

У меня есть JTextPane, где я хочу добавить строки, и в зависимости от их содержимого у них есть другое форматирование.Форматирование JTextPane

В настоящее время у меня есть это

StyleContext context = new StyleContext(); 
StyledDocument document = new DefaultStyledDocument(context); 

Style styleBold = context.getStyle(StyleContext.DEFAULT_STYLE); 
StyleConstants.setBold(styleBold, true); 
StyleConstants.setFontSize(styleBold, 18); 

Style styleNorm = context.getStyle(StyleContext.DEFAULT_STYLE); 
StyleConstants.setFontSize(styleNorm, 15); 

for (int i = 0; i < temp.size(); i++) { 
    String tmp = temp.get(i); 
    if (tmp.substring(0, 2).equals(COMMENT_PREFIX)) { 
     String addThis = " - " + tmp.substring(2); 

     try { 
      document.insertString(document.getLength(), addThis, 
        styleNorm); 
     } //CATCH 
    } else if (tmp.substring(0, 2).equals(VERSION_PREFIX)) { 
     Date d = new Date(System.currentTimeMillis()); 
     String addThis = "Version: " + tmp.substring(2) + " - " 
       + d.toString(); 
     try { 
      document.insertString(document.getLength(), addThis, 
        styleBold); 
     } //CATCH 
    } 
    try { 
     document.insertString(document.getLength(), "\n", styleNorm); 
    } //CATCH 
} 

Я вынул заявления об уловах, чтобы уменьшить размер кода.

Тем не менее, это форматирует весь текст с помощью styleNorm. Это потому, что последнее называется Style, и они перезаписывают друг друга? Если да, то как это исправить?

+0

Textpane боль, но вам нужно Formatter. – 2013-03-24 15:17:50

+0

Пожалуйста, отредактируйте свой вопрос, чтобы включить [sscce] (http://sscce.org/), который фокусируется на одной проблеме. – trashgod

ответ

9

Также отображается here, TextComponentDemo показано, как применить число StyleConstants, включая размер шрифта, стиль, выравнивание и цвет. Стили могут применяться либо непосредственно к Document, как показано в initAttributes(), либо действиями StyledEditorKit, см. here.

Приложение: Пример ниже создает три связанных стиля, используя SimpleAttributeSet. Обратите внимание, что highAlert изменяет цвет, но сохраняет жирный атрибут, унаследованный от boldBlue.

image

import java.awt.Color; 
import java.awt.EventQueue; 
import java.util.Date; 
import javax.swing.JFrame; 
import javax.swing.JTextPane; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.SimpleAttributeSet; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyledDocument; 

/** 
* @see https://stackoverflow.com/a/15600689/230513 
*/ 
public class Test { 

    private void display() throws BadLocationException { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     String s = new Date().toString(); 
     JTextPane jtp = new JTextPane(); 
     StyledDocument doc = (StyledDocument) jtp.getDocument(); 

     SimpleAttributeSet normal = new SimpleAttributeSet(); 
     StyleConstants.setFontFamily(normal, "SansSerif"); 
     StyleConstants.setFontSize(normal, 16); 

     SimpleAttributeSet boldBlue = new SimpleAttributeSet(normal); 
     StyleConstants.setBold(boldBlue, true); 
     StyleConstants.setForeground(boldBlue, Color.blue); 

     SimpleAttributeSet highAlert = new SimpleAttributeSet(boldBlue); 
     StyleConstants.setFontSize(highAlert, 18); 
     StyleConstants.setItalic(highAlert, true); 
     StyleConstants.setForeground(highAlert, Color.red); 

     doc.insertString(doc.getLength(), s + "\n", normal); 
     doc.insertString(doc.getLength(), s + "\n", boldBlue); 
     doc.insertString(doc.getLength(), s + "\n", highAlert); 
     f.add(jtp); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        new Test().display(); 
       } catch (BadLocationException ex) { 
        ex.printStackTrace(System.err); 
       } 
      } 
     }); 
    } 
} 
+1

+1 Ты действительно качающийся герой. Поздравляем с более чем 100 000 повторений. –

+0

как у нас есть сочетание ** жирного ** и ** курсив **. Вы, например, в основном выделены жирным шрифтом и курсивом отдельно. Как мне нужно печатать полужирным и курсивом для одного и того же текста. –

+1

@ chinna_82 - чтобы выделить как полужирный, так и курсивный для SimpleAttributeSet (например, sas), вы просто вызываете «StyleConstants.setBold (sas, true)» и «StyleConstants.setItalic (sas, true)». – marklark