2013-04-18 1 views
3

이전에는 JEditorPane을 사용했지만 HTML 만 표시하고 SVG를 표시 할 수 없으며 중첩 된 SVG HTML은 표시를 완료 할 수 없습니다.HTML + SVG를 표시 할 수 없음

그럼 JSVGCanvas을 사용하지만 SVG 만 표시 할 수 있으며 HTML을 표시 할 수 없습니다.

이 문제를 해결할 수있는 방법이 있습니까?

답변

5

JSVGCanvas 캔버스를 SVG 용으로 설정하십시오. 이를 달성하려면 전문가 HTMLEditorKit이 필요합니다. HTLMEditorKitAppleteer입니다.

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; 
    } 
}