Раскраска слов по позициям - PullRequest
2 голосов
/ 21 января 2012

Я окрашиваю некоторые части линий в зависимости от их положения.

Используется библиотека Swing. Компонент - JTextPane.

StyledDocument doc = editorJTextPane.getStyledDocument();

Style styleRed = editorJTextPane.addStyle("Red", null);
StyleConstants.setForeground(styleRed, Color.red);
StyleConstants.setBold(styleRed, rootPaneCheckingEnabled);

Style styleGreen = editorJTextPane.addStyle("Green", null);
StyleConstants.setForeground(styleGreen, Color.green);
StyleConstants.setBold(styleGreen, rootPaneCheckingEnabled);

String[] allLines = editorJTextPane.getText().split("\n");

int offSet1 = 0;
int offSet2 = 5;

for(int i=0; i<allLines.length; i++)
{
  line = allLines[i];
  lineLength = line.length() + 1;

  doc.setCharacterAttributes(offSet1, 4, editorJTextPane.getStyle("Red"), true);    

  doc.setCharacterAttributes(offSet2, 15, editorJTextPane.getStyle("Green"), true);

  offSet1 = offSet1 + lineLength;
  offSet2 = offSet2 + lineLength;
}

когда любая из линий, doc.setCharacterAttributes (offSet1, 4, editorJTextPane.getStyle ("Red"), true); или же doc.setCharacterAttributes (offSet2, 15, editorJTextPane.getStyle ("Green"), true);

прокомментировано, это работает. Когда оба там, я получаю ошибку, Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException в javax.swing.text.DefaultStyledDocument.setCharacterAttributes (DefaultStyledDocument.java:507)

хотелось бы знать, что setCharacterAttributes не должен быть в циклах?

Спасибо

1 Ответ

0 голосов
/ 27 марта 2012

Вы должны использовать JDK 7 для строки 507 в DefaultStyledDocument.java

public void setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace) {
         .......
         AttributeSet sCopy = s.copyAttributes();//Line 507 here
         .......
     }

Таким образом, набор атрибутов, который вы передали, равен нулю.Код, который вы разместили, работает для меня, поэтому ваш код должен был что-то не так в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...