HTML页面不显示在Java Swing JTextPane
问题描述:
我试图用非JTextArea
Swing文本组件进行实验,并在此代码中试图在JTextPane
中显示一个非常简单的网页。我可以读取网页并将其放入JTextPane
的文档中,如我在HTMLDocument
上打印返回的调用getText
时返回的字符串所示,但在JTextPane中不显示任何内容。我觉得我好像缺少一些基本的东西。提前致谢。HTML页面不显示在Java Swing 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();
}
});
}
}
答
的setEditorKit()
呼叫删除您最初指定文件,并用新的替换它。只需添加另一行即可恢复正确的文档。
htmlPane.setEditorKit(htmlKit);
htmlPane.setDocument(htmlDocument);
或从textpane
htmlPane.setEditorKit(htmlKit);
htmlDocument = (HTMLDocument) htmlPane.getDocument();
+1
感谢您的快速,简短和正确的答复!荣誉给你! – 2011-06-11 05:43:07
答
你并不需要知道正在使用的实际编辑器工具包或文档reget文件:
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);
}
}
尝试的JTextPane。 setPage(URL)来查看它是否可以呈现您的页面。 – 2011-06-11 05:21:42