2

JTextAreaSwing以外のテキストコンポーネントを試してみました。このコードでは、非常に単純なWebページをに表示しようとしていますJTextPaneJTextPaneの呼び出しで返される文字列を印刷すると示されているように、Webページを読み取って、のドキュメントgetTextに入れることができますHTMLDocumentが、JTextPaneには何も表示されません。基本的なものが欠けているような気がします。前もって感謝します。

私の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();
         }
      });
   }
}
4

2 に答える 2

7

の呼び出しsetEditorKit()により、最初に割り当てられたドキュメントが削除され、新しいドキュメントに置き換えられます。正しいドキュメントを復元するには、直後に別の行を追加するだけです。

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

または、テキストペインからドキュメントを再取得します

htmlPane.setEditorKit(htmlKit);
htmlDocument = (HTMLDocument) htmlPane.getDocument();
于 2011-06-11T05:21:46.713 に答える
5

使用されている実際のエディターキットまたはドキュメントを知っている必要はありません。

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);
    }
}
于 2011-06-11T15:41:23.800 に答える