Pregunta

Estoy tratando de experimentar con los noJTextArea Compensar los componentes de texto, y en este código estoy tratando de mostrar una página web muy simple en un JTextPane. Puedo leer la página web y poder ponerla en el JTextPaneDocumento de ', como se muestra cuando imprimo la cadena que se devuelve la llamada getText en mi HTMLDocument, pero no aparece nada en el JTextPane. Siento que me estoy perdiendo algo básico. Gracias por adelantado.

Mi 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();
         }
      });
   }
}
¿Fue útil?

Solución

La llamada de setEditorKit() Elimina su documento inicialmente asignado y lo reemplaza por uno nuevo. Simplemente agregue otra línea justo después para restaurar el documento correcto.

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

o regode el documento de su TextPane

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

Otros consejos

No necesita estar al tanto del kit o documento del editor real que se está utilizando:

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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top