Добавить текст в JEditorPane

Я разрабатываю приложение, которое использует JEditorPane для отображения данных из базы данных.

Предполагается, что EditorPane добавляет resultSet в формате HTML. Моя проблема в том, что JEditorPane стирает первые resultSet и отображает только последние resultSet.

Ниже приведен фрагмент моего кода:

   while(rs.next()){
    String htmlComent = "<"html>"<b>
    + "<"head><"title><"/title>"</>
    + "<"body>"<b>
    + "<"hr>"
    + "<"b align='left'> Subject"+"    : "+rs.getString(1)+"<"/b><"br>"
    + "<"b align='left'> Institution"+": "+rs.getString(2)+"<"/b><"br>"
    + "<"b align='left'> Date" +"      "+": "+rs.getString(3)+"</b><br>"
    + "<"b align='left'> Minuted To "+": "+rs.getString(4)+"</b><"br>"
    + "<"b align='left'> Minuted by "+": "+rs.getString(5)+"<"/b><"br>"
    + "<"hr>"
    + "<"p align = 'left' ><"B>Comment<"/B><"/p>"

    +  rs.getString(6)
    + "<"/body>"
    + "<"/head>"
    + "<"/html>";
     append(htmlComent+ "\n" );

..............................

/**
 *  This method appends text to a JEditorPane
 */
public void append(String s) {
    try {
      HTMLEditorKit kit = new HTMLEditorKit();
      HTMLDocument doc2 = new HTMLDocument();
      editorPane.setEditorKit(kit);
      editorPane.setDocument(doc2);
      HTMLDocument doc = (HTMLDocument)editorPane.getDocument();
      kit.insertHTML(doc, doc2.getLength(), s, 0, 0, null);
      //kit.insertHTML(doc, doc2.getLength(),, s, 0, 0, null);
   } catch(BadLocationException |IOException exc) {
      JOptionPane.showMessageDialog(this, exc.getMessage());
   }
}

..........................

Может ли кто-нибудь сказать мне, где я ошибаюсь?


person Hussein Alhassan    schedule 25.04.2014    source источник
comment
Некоторые альтернативы рассматриваются здесь.   -  person trashgod    schedule 25.04.2014


Ответы (3)


 String htmlComent = "<html><b> <head><title></title></head><body><b>";

while(rs.next())
{
     htmlComent=htmlcoment +
     "<"hr>"
    + "<"b align='left'> Subject"+"    : "+rs.getString(1)+"<"/b><"br>"
    + "<"b align='left'> Institution"+": "+rs.getString(2)+"<"/b><"br>"
    + "<"b align='left'> Date" +"      "+": "+rs.getString(3)+"</b><br>"
    + "<"b align='left'> Minuted To "+": "+rs.getString(4)+"</b><"br>"
    + "<"b align='left'> Minuted by "+": "+rs.getString(5)+"<"/b><"br>"
    + "<"hr>"
    + "<"p align = 'left' ><"B>Comment<"/B><"/p>"
    +  rs.getString(6) +"</br>";
    }

htmlcoment=htmlcomment+ "</body></html>";

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

person Rupesh Terase    schedule 25.04.2014

инициализируйте строку htmlComent перед циклом while, создайте строку внутри цикла и вызовите метод добавления вне цикла.

person nanopart    schedule 25.04.2014

Проблема в вашем методе append() и в вашем String htmlContent..

Вы должны начать свой htmlContent заранее, вот так:

StringBuilder htmlContent = new StringBuilder();
htmlContent.append("<html>");
htmlContent.append("<head>");
htmlContent.append("<title>Your title goes Here</title>");
htmlContent.append("</head>");
htmlContent.append("<body>");

while (rs.next()) {
   htmlContent.append("<hr>");
   htmlContent.append("<b align='left'> Subject    : "+rs.getString(1)+"</b><br>");
   htmlContent.append("<b align='left'> Institution: "+rs.getString(2)+"</b><br>");
   htmlContent.append("<b align='left'> Date      : "+rs.getString(3)+"</b><br>");
   htmlContent.append("<b align='left'> Minuted To : "+rs.getString(4)+"</b><br>");
   htmlContent.append("<b align='left'> Minuted by : "+rs.getString(5)+"</b><br>");
   htmlContent.append("</hr>");
   htmlContent.append("<p align = 'left' ><B>Comment</B></p>");
   htmlContent.append(rs.getString(6));
}

htmlContent.append("</body>");
htmlContent.append("</html>");

//Now you can append your text to the HtmlEditorKit
append(htmlContent.toString());

Вы должны добавить заголовок перед итерацией, потому что вы хотите создать одну HTML-страницу для отображения всех результатов. В приведенном вами коде вы создавали новую HTML-страницу для каждой итерации набора результатов, поэтому она показывала только последний результат.

При этом мы сейчас делаем один заголовок и для каждой итерации создаем <hr> контент

и ПОСЛЕ итерации вы закрываете теги <body> и <html> и добавляете их в свой HtmlEditorKit =)

person Gabriel Câmara    schedule 25.04.2014