当前位置: 首页 > 面试题库 >

无法显示HTML + SVG

相诚
2023-03-14
问题内容

我曾经使用过JEditorPane,但是它只能显示HTML,不能显示SVG,并且嵌套的SVG HTML无法完成显示。

然后,我使用JSVGCanvas,但是它只能显示SVG,不能显示HTML。

有什么办法解决这个问题?


问题答案:

配置JEditorPane为将JSVGCanvas画布用于SVG。为此,您需要一个专家HTMLEditorKit。这里是HTLMEditorKit的Appleteer。

package org.pscode.ui.applet.appleteer;

import java.awt.Component;
import java.awt.Dimension;

// placeholder component
import javax.swing.JButton;

import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.View;
import javax.swing.text.ComponentView;
import javax.swing.text.PlainView;
import javax.swing.text.ViewFactory;
import javax.swing.text.Element;
import javax.swing.text.AttributeSet;
import javax.swing.text.StyleConstants;

import org.pscode.ui.applet.appleteer.AppletElement;
import org.pscode.ui.applet.appleteer.AppletLoaderContainer;

import java.util.HashMap;
import java.util.Enumeration;

import java.net.URL;

import java.util.logging.*;

/** The AppletEditorKit extends HTMLEditorKit to support the applet element. */
public class AppletEditorKit extends HTMLEditorKit {

    URL documentBase;

    PseudoBrowser browser;

    static int appletCount;
    static boolean hasNamedApplet;


    public AppletEditorKit(URL documentBase, PseudoBrowser browser) {
        this.documentBase = documentBase;
        this.browser = browser;
        appletCount = 0;
        hasNamedApplet = false;
    }

    public ViewFactory getViewFactory() {
        return new AppletHTMLFactory(documentBase, browser);
    }

    public static class AppletHTMLFactory extends HTMLFactory implements ViewFactory {

        URL documentBase;
        PseudoBrowser browser;

        AppletHTMLFactory(URL documentBase, PseudoBrowser browser) {
            this.documentBase = documentBase;
            this.browser = browser;
        }

        public View create(Element element) {
            AttributeSet set = element.getAttributes();
            Object o =
                element.getAttributes().getAttribute(StyleConstants.NameAttribute);
            if (o instanceof HTML.Tag) {

                HTML.Tag kind = (HTML.Tag) o;

                Logger.getLogger("Appleteer").log(
                    Level.FINEST, "AEK.c  HTML.Tag: " + kind);

                if (kind == HTML.Tag.APPLET ) {


                    if(!contains(element.getAttributes().getAttributeNames(),"endtag")) {
                        View view;
                        try {
                            AppletElement ae = new AppletElement(
                                element,
                                browser,
                                "applet" + appletCount++);
                            view = new AppletView(ae);
                            if ( ae.getName()!=null ) {
                                hasNamedApplet = true;
                            }
                        } catch(Exception e) {
                            return new PlainView(element);
                        }

                        return view;
                    } else {
                        return new PlainView(element);
                        //return null;
                    }
                } else if (kind == HTML.Tag.PARAM) {
                    Logger.getLogger("Appleteer").log(
                        Level.FINEST, "HTML Param: " + kind);
                }
            }
            return super.create( element );
        }
    }

    public static boolean contains(Enumeration en, String name) {
        while( en.hasMoreElements() ) {
            Object o = en.nextElement();
            if (o instanceof HTML.Attribute) {
                Logger.getLogger("Appleteer").log(
                    Level.FINEST, "HTML.Attribute: " + 0);
                if (o.toString().equals(name)) {
                    return true;
                }
            }
        }
        return false;
    }
}


 类似资料:
  • 问题内容: 当显示其父元素时,是否有任何机制可显示子元素:无? 这种情况是隐藏选项卡上的验证错误。我想显示错误消息,即使该字段是隐藏的。 标记: CSS: 我猜这是不可能的,因为孩子没有上下文,但以防万一? 问题答案: 不,这是不可能的。隐藏该元素,因此不会显示任何子元素。 编辑: 这可能是沿着你想要的线,如果你能够从使用切换到。 使用此方法,您可以隐藏父元素的内容,但显示所需的特定内容。唯一需要

  • 我的一个视图返回了一个字符串,如下所示: 我试图用刀片显示它: 但是,输出是原始字符串,而不是呈现的超文本标记语言。如何在Laravel中使用Blade显示超文本标记语言? PS.PHP正确显示HTML。

  • 我复活了一个CN1项目(已经发布),并尝试让它在Netbeans 11下的模拟器中运行(运行在OpenJdK 11上)。然而,该项目不断失败。 我更新了CN1谷歌地图扩展,刷新了libs,但问题仍然存在。 谷歌地图扩展版本是42。我该怎么做才能让一切都像以前一样运转? 任何帮助都很感激,

  • 本文向大家介绍HTML 突出显示,包括了HTML 突出显示的使用技巧和注意事项,需要的朋友参考一下 示例 该<mark>元素是HTML5中的新元素,用于“由于其在另一个上下文中的相关性”而标记或突出显示文档中的文本。1 最常见的示例是用户输入搜索查询并显示结果以突出显示所需查询的搜索结果。 输出: 常见的标准格式是黄色背景上的黑色文本,但是可以使用CSS进行更改。

  • 我有返回Json格式数据的C#函数,函数如下 执行此操作时,我遇到以下错误: null

  • 问题内容: 我想要一个JFrame,在左右两侧有一个边框,边框为黑色,宽度为withfOfJFrame / 10。 现在,我的尝试如下所示: 这会在左右两侧添加一个黑色边框,但是该边框具有固定的大小,并且在调整窗口大小时不会重新计算。大小甚至不是800(JFrame的开始宽度)的1/10。 我究竟做错了什么?还是有更好的方法来做到这一点? 问题答案: 您可以使用和适当的权重来获得所需的结果: