无法显示HTML + SVG [英] Can't show HTML + SVG

查看:496
本文介绍了无法显示HTML + SVG的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



有什么办法可以解决这个问题吗?解决方案配置 JEditorPane 到对SVG使用 JSVGCanvas 画布。为了达到这个目标,你需要专家 HTMLEditorKit 。这是 HTLMEditorKit

  package org.pscode.ui.applet.appleteer; 

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

//占位符组件
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。*;

/ ** AppletEditorKit扩展了HTMLEditorKit以支持applet元素。 * /
public class AppletEditorKit extends HTMLEditorKit {

URL documentBase;

伪浏览器浏览器;

static int appletCount;
static boolean hasNamedApplet;


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

public ViewFactory getViewFactory(){
返回新的AppletHTMLFactory(documentBase,browser);
}

public static class AppletHTMLFactory extends HTMLFactory implements ViewFactory {

URL documentBase;
PseudoBrowser浏览器;

AppletHTMLFactory(URL documentBase,PseudoBrowser浏览器){
this.documentBase = documentBase;
this.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); (!包含(element.getAttributes()。getAttributeNames(),endtag)的

(kind == HTML.Tag.APPLET){


)){
查看视图;
尝试{
AppletElement ae =新的AppletElement(
元素,
浏览器,
applet+ appletCount ++);
view = new AppletView(ae);
if(ae.getName()!= null){
hasNamedApplet = true;
}
} catch(Exception e){
return new PlainView(element);
}

返回视图;
} else {
return new PlainView(element);
//返回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;
}
}
}
返回false;
}
}


I used to use JEditorPane, but it can only display HTML, cannot display SVG, and nested SVG HTML cannot complete display.

Then I use JSVGCanvas, but it can only display SVG, cannot display HTML.

Is there any way to solve this problem?

解决方案

Configure JEditorPane to use the JSVGCanvas canvas for SVG. To achieve that, you need a specialist HTMLEditorKit. Here is the HTLMEditorKit of 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;
    }
}

这篇关于无法显示HTML + SVG的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆