Frage

Ich versuche mit dem Nicht-Experimentieren zu experimentierenJTextArea Swing -Textkomponenten und in diesem Code versuche eine sehr einfache Webseite in a anzuzeigen JTextPane. Ich kann die Webseite lesen und sie in die einsetzen JTextPaneDokument, wie gezeigt, wenn ich die Zeichenfolge ausdrucken, die beim Anruf zurückgibt getText auf meinem HTMLDocument, aber in der jTextPane taucht nichts auf. Ich fühle mich, als würde mir etwas Grundlegendes fehlen. Danke im Voraus.

Meine SSCCE:

import java.awt.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

@SuppressWarnings("serial")
public class TestStyledDoc2 extends JPanel {
   public static final String GETTY_FILE = "http://www.d.umn.edu/~rmaclin/" +
        "gettysburg-address.html";

   private HTMLEditorKit htmlKit = new HTMLEditorKit();
   private HTMLDocument htmlDocument = (HTMLDocument) htmlKit.createDefaultDocument();
   private JTextPane htmlPane = new JTextPane(htmlDocument);

   public TestStyledDoc2() {
      JScrollPane scrollPane1 = new JScrollPane(htmlPane);
      try {
         htmlPane.setEditorKit(htmlKit);
         URL gettyUrl = new URL(GETTY_FILE);
         htmlKit.read(gettyUrl.openStream(), htmlDocument, 0);
         System.out.println(htmlDocument.getText(0, htmlDocument.getLength()));
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (BadLocationException e) {
         e.printStackTrace();
      } 

      scrollPane1.getViewport().setPreferredSize(new Dimension(400, 400));

      setLayout(new BorderLayout());
      add(scrollPane1, BorderLayout.CENTER);
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("TestStyledDoc");
      frame.getContentPane().add(new TestStyledDoc2());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}
War es hilfreich?

Lösung

Der Ruf von setEditorKit() Entfernt Ihr ursprünglich zugewiesenes Dokument und ersetzt es durch eine neue. Fügen Sie einfach eine weitere Zeile hinzu, um das richtige Dokument wiederherzustellen.

htmlPane.setEditorKit(htmlKit);
htmlPane.setDocument(htmlDocument);

oder regieren Sie das Dokument von Ihrem TextPane

htmlPane.setEditorKit(htmlKit);
htmlDocument = (HTMLDocument) htmlPane.getDocument();

Andere Tipps

Sie müssen sich nicht des verwendeten Editor -Kits oder -dokuments bewusst sein:

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;

public class EditorPaneLoad extends JFrame
{
    public EditorPaneLoad()
        throws Exception
    {
        FileReader reader = new FileReader("a.html");
//      JEditorPane editor = new JEditorPane();
        JTextPane editor = new JTextPane();
        editor.setContentType( "text/html" );
        editor.setEditable( false );
        editor.read(reader, null);
        System.out.println(editor.getText());
        System.out.println("\n------------\n");
        Document doc = editor.getDocument();
        System.out.println(doc.getText(0, doc.getLength()));
        JScrollPane scrollPane = new JScrollPane( editor );
        scrollPane.setPreferredSize( new Dimension(300, 200) );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
        throws Exception
    {
        EditorPaneLoad frame = new EditorPaneLoad();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top