Не могу добавить текст в JEditorPane с помощью text/html

У меня есть JEditorPane в моем классе, и я пытаюсь добавить к нему текст. (Я не использовал текстовую область или панель, потому что она должна поддерживать определенные вещи, такие как HTML)

У меня проблема (мой JEditorPane называется chatLog), когда я набираю chatLog.setContentType("text/html"); и набираю chatLog.setText("Test");
Ничего не происходит...

Во-вторых, я закомментировал / удалил chatLog.setContentType("text/html"); текст, который должен появиться, выглядит нормально.

Я не знаю, что я делаю неправильно.

Источник:

public ServerGUI() {
    // Rest of code above.

    JEditorPane chatLog = new JEditorPane();
    chatLog.setContentType("text/html");
    chatLog.setEditable(false);

    // Rest of code below.
}

public void appendText(String str) {
    // Can use a word instead of str too like the "Test" above.
    chatLog.setText(chatLog.getText() + str);
    //chatLog.setCaretPosition(chatLog.getText().length() - 1);
}

Кроме того, у меня есть еще одна небольшая проблема, которая не является слишком серьезной: я не могу установить позицию курсора, как показано выше, когда у меня тип контента HTML. Там написано, что есть IllegalArgument Exception

Спасибо за помощь.


person Sk4llsRPG    schedule 30.07.2014    source источник
comment
Я думаю, что у вас есть проблема x --› y, из этого вопроса ничего не ясно - голосование за закрытие как слишком широкое (как и если XxxEditorKit используется, переопределяется или инициализируется), но снято в темноте .... @Guillaume Polet   -  person mKorbel    schedule 30.07.2014
comment
Или хорошо, это было решено сейчас, так что не беспокойтесь.   -  person Sk4llsRPG    schedule 30.07.2014


Ответы (1)


Проблема в том, что вы добавляете новый текст следующим образом:

chatLog.setText(chatLog.getText() + str);

Таким образом, вы добавляете текст к текущему содержимому. Если вы установите тип контента text/html и никогда не вызовете JEditorPane.setText(), он все равно будет иметь HTML-код по умолчанию. Этот HTML-код по умолчанию заканчивается соответствующим закрывающим тегом </html>. Теперь, если вы добавите что-либо в текст HTML, это будет после закрывающего тега </html>, поэтому оно не будет отображаться.

Чтобы продемонстрировать это:

JEditorPane chatLog = new JEditorPane();
chatLog.setContentType("text/html");
System.out.println(chatLog.getText()); // This will print an HTML document

Пустой HTML-документ имеет тег <body> и пустой тег <p>, что-то вроде этого:

<html>
  <head>

  </head>
  <body>
    <p style="margin-top: 0">

    </p>
  </body>
</html>

Предлагаемое решение:

Используйте JEditorPane.getDocument(). Если вы установите тип содержимого text/html, по умолчанию возвращаемый Document будет экземпляром HTMLDocument, который можно использовать для добавления новых элементов для новых сообщений чата.

person icza    schedule 30.07.2014
comment
Всякий раз, когда я вызываю его во второй раз, он появляется, но не в формате HTML? - person Sk4llsRPG; 30.07.2014
comment
Упс, моя ошибка, просто выделил жирным шрифтом. :П - person Sk4llsRPG; 30.07.2014
comment
Кроме того, спасибо, это решило все мои проблемы, теперь мне просто нужно исправить свой HTML и сделать его стильным: P - person Sk4llsRPG; 30.07.2014