【问题标题】:Browser using JEditorPane forcing blue background使用 JEditorPane 强制蓝色背景的浏览器
【发布时间】:2014-04-30 01:43:49
【问题描述】:

这是我用来在 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
  • 我在编辑器窗格和包含它的容器上都试过了。我不知道我应该添加什么代码,除了创建容器、给它一个边框布局、创建编辑器窗格并将其添加到容器之外,没有更多相关的代码。背景只是蓝色
  • “这是我用来在 JEditorPane 中显示 google 的代码” JEditorPane 从未打算呈现“真实世界”的 HTML。请注意,它仅支持 HTML 3.2 和(非常)基本 CSS 的 子集
  • 我无法重现同样的问题,但我得到了一个蓝色的前景。我有一个白色的背景,这是正确的。但是对于格式为<span><font> 的任何代码,我都有蓝色文本,而对于裸<p> 中的文本,我有白色文本(无论Java 代码中的背景和前景色如何)。请注意,所有内容都在同一个<p> 中,白色文本或蓝色文本,跨度或字体或裸露。

标签: java swing url colors jeditorpane


【解决方案1】:

正如@AndrewThompson 在 cmets 中指出的那样,JEditorPane 确实落后了,它仅支持 HTML 3.2 和 CSS1 的子集,并不能真正呈现任何现代网页。

我强烈建议使用替代方法,例如:

  • JavaFX WebView

    代码片段:(没有依赖,你可以按原样运行)

    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

    代码示例:

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

    @见BrowsePanel.java

  • NativeSwing

    代码片段:

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

    @见SimpleWebBrowserExample.java

【讨论】:

    【解决方案2】:

    一个可能的原因是 HTMLDocument 对三位颜色代码的解析与正常情况不同。因此,所有内容都显示为蓝色,因为仅设置了蓝色字节(以及绿色字节的最低 4 位)。

    例如:#FFF 将被解释为#000FFF,即锐蓝色。

    至少这解决了我在 cmets 中提到的问题。后台也有相关线程的可能原因。

    【讨论】:

      【解决方案3】:

      看来您在课堂上扩展了 JFrame。所以请使用 editorPane 对象来设置颜色如下

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

      【讨论】:

        【解决方案4】:

        我曾经尝试使用大约 JDK1.3 的 JEditorPane,但支持非常有限。据我了解,该 API 在提供浏览支持方面并没有太大进步。

        我建议您结帐 DJ here。设置简单,使用可靠。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2014-04-18
          • 2011-10-03
          相关资源
          最近更新 更多