为什么JEditorPane不显示用HTML编写的图像?

时间:2014-11-07 06:35:38

标签: java html swing javafx jeditorpane

所以我的HTML就是这个。

<!DOCTYPE HTML>
<html>
<body >
<h1 style="background-color:lightblue">This is a h1</h1>
<img src="haha.jpg" alt="W3Schools.com" width="104" height="142" > 
</p>
</body>
</html>

这是我加载HTML的方式:

JEditorPane je = new JEditorPane();
je.setEditable(false);
je.setContentType("text/html");
FileReader fr = new FileReader("testPage.html");
BufferedReader br = new BufferedReader(fr);
String text = "";
String inputLine = br.readLine();
while(inputLine!=null){
    text += inputLine+"\n";
    inputLine=br.readLine();
}
je.setText(text);
SwingNode sn = new SwingNode();
sn.setContent(je);

h1部分工作正常,但图像部分没有显示,显示在.html文件中。所以我想知道是否有任何方法可以在HTML中显示图像?如果JEditorPane无法执行,其他组件会显示html WITH 图片?

帮助感谢。

2 个答案:

答案 0 :(得分:1)

我将图像复制到执行程序的同一工作目录中,并使用以下HTML ...

<!DOCTYPE HTML>
<html>
    <body >
        <h1 style="background-color:lightblue">This is a h1</h1>
        <img src="haha.jpg" alt="W3Schools.com" width="104" height="142" > 
    </p>
</body>
</html>

代码......

import java.awt.EventQueue;
import java.io.File;
import java.net.URL;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestEditor {

    public static void main(String[] args) {
        new TestEditor();
    }

    public TestEditor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JEditorPane editor = new JEditorPane();
                try {
                    editor.setPage(new File("testPage.html").toURI().toURL());
                } catch (Exception exp) {
                    exp.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(editor));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

能够让它毫无问题地运行......

Editor

将图像放在程序执行上下文的相对位置(&#34;。&#34;)

答案 1 :(得分:0)

由于您使用的是SwingNode,因此您的应用程序实际上使用了JavaFX。

JavaFX有一个Web浏览器组件,您可以在这里阅读更多相关信息:

Overview of the JavaFX WebView Component

以下是如何使用它的简短示例:

WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.load(url);

url可以是"http://example.com"之类的地址,也可以指向如下文件或资源:

Paths.get("testPage.html").toURI().toURL();

如果您将HTML内容设为String,则可以按以下方式加载:

String htmlContent = "<html>....</html>";
browser.getEngine().loadContent(htmlContent);

如果要在htmlContent中插入图像,可以这样做:

URL url = Main.class.getResource("haha.jpg"); // haha.jpg is next to Main class
String text = "<html><img src=\"" + url + "\" width=\"104\" height=\"142\" > </html>";

或者,如果要在计算机上插入指向固定文件的图像,请像这样创建url

URL url = new File("C:/images/haha.jpg").toURI().toURL();

或者:

URL url = Paths.get("C:/images/haha.jpg").toUri().toURL();