使用JEditorPane的浏览器强制显示蓝色背景

10

这是我用来在JEditorPane中显示Google的代码

String url="http://google.com";    
editorPane.setEditable(false);
    try {
        editorPane.setPage(url);
    } catch (IOException e) {}

但不知何故,背景颜色总是蓝色,无论我是否调用。

setBackgroundColor(Color.WHITE);

你调用了 setBackgroundColor(Color.WHITE); 方法的组件是哪一个?你正在设置其父组件的背景颜色。请分享一些代码。对我来说,editorPane.setBackground(Color.WHITE); 完美地工作,并且我已将其添加到 JScrollPane 中。 - Braj
我已经在编辑器窗格和包含它的容器上尝试过了。我不知道应该添加什么代码,除了创建容器、给它一个边框布局、创建编辑器窗格并将其添加到容器之外,没有更相关的代码了。背景只是简单的蓝色。 - DGK
这是我用来在JEditorPane中显示Google的代码。 JEditorPane从未旨在呈现“真实世界”的HTML。请注意,它仅支持HTML 3.2子集和(非常)基本的CSS。 - Andrew Thompson
我无法复现同样的问题,但相反,我得到了一个蓝色的前景。 我有一个白色的背景,这是正确的。 但是,对于任何在<span><font>中格式化的代码,我都有蓝色的文本,而我对于裸露的<p>中的文本(不考虑来自Java代码的背景和前景颜色)都是白色的。请注意,所有内容都在同一个<p>中,白色文本或蓝色文本,span或font或bare。 - SOFe
然而,背景颜色在我的代码中是有效的。您可以从 GitHub 找到我的项目的源代码(我还没有时间简化问题)。 - SOFe
4个回答

8

如@AndrewThompson在评论中指出的那样,JEditorPane实际上已经过时了。它只支持HTML 3.2和CSS1的一个子集,并不能真正地呈现任何现代网页。

我强烈建议使用其他替代方案,例如:

  • JavaFX WebView

    Code Snippet: (no dependencies, you can run it as-is)

    import javafx.application.Platform;
    import javafx.embed.swing.JFXPanel;
    import javafx.scene.Scene;
    import javafx.scene.web.WebEngine;
    import javafx.scene.web.WebView;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JavaFxBrowser implements Runnable {
        private WebEngine webEngine;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new JavaFxBrowser());
        }
    
        public void loadURL(final String url) {
            Platform.runLater(() -> {
                webEngine.load(url);
            });
        }
    
        @Override
        public void run() {
            // setup UI
            JFrame frame = new JFrame();
            frame.setVisible(true);
            frame.setPreferredSize(new Dimension(1024, 600));
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JFXPanel jfxPanel = new JFXPanel();
            frame.getContentPane().add(jfxPanel);
            frame.pack();
    
            Platform.runLater(() -> {
                WebView view = new WebView();
                webEngine = view.getEngine();
    
                jfxPanel.setScene(new Scene(view));
            });
    
            loadURL("http://www.google.com");
        }
    }
    
  • Flying Saucer

    Code Sample:

    XHTMLPanel panel = new XHTMLPanel();
    panel.setDocument("http://www.google.com");
    

    @see BrowsePanel.java

  • or NativeSwing

    Code Snippet:

    final JWebBrowser webBrowser = new JWebBrowser();
    webBrowser.navigate("http://www.google.com");
    

    @see SimpleWebBrowserExample.java


1
可能的原因是HTMLDocument解析三位数颜色代码与正常情况不同。因此,所有东西都显示为蓝色,因为只设置了蓝色字节(和绿色字节的最低4位)。
例如:#FFF将被解释为#000FFF,这是鲜艳的蓝色。
至少这解决了我在评论中提到的问题。相关线程背景的可能原因也是如此。

1

看起来你在类中扩展了JFrame。因此,请使用以下方式设置颜色的editorPane对象

String url="http://google.com";    
editorPane.setEditable(false);
editorPane.setBackground(Color.WHITE);
    try {
        editorPane.setPage(url);
    } ca

0

曾经我尝试过在JDK1.3环境下使用JEditorPane,但是它的支持非常有限。据我所知,该API没有太多进展来提供浏览支持。

我建议您检查一下DJ 这里。它简单易用且可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接