3
我曾經使用JEditorPane
,但它只能顯示HTML,無法顯示SVG,並且嵌套的SVG HTML無法完成顯示。無法顯示HTML + SVG
然後我用JSVGCanvas
,但它只能顯示SVG,不能顯示HTML。
有什麼辦法可以解決這個問題嗎?
我曾經使用JEditorPane
,但它只能顯示HTML,無法顯示SVG,並且嵌套的SVG HTML無法完成顯示。無法顯示HTML + SVG
然後我用JSVGCanvas
,但它只能顯示SVG,不能顯示HTML。
有什麼辦法可以解決這個問題嗎?
配置JEditorPane
使用JSVGCanvas
畫布進行SVG。要做到這一點,您需要專家HTMLEditorKit
。這裏是Appleteer的HTLMEditorKit
。
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;
}
}