2012-02-25 79 views

回答

0

我觉得你真的想要做的是...

  1. 扩展HTMLEditorKit和覆盖getViewFactory()
  2. 使其返回扩展HTMLEditorKit.HTMLFactory
  3. 在这个类,覆盖create()换来<IMG>和super.create()否则

你这样的自定义视图:

class MyImageKit extends HTMLEditorKit { 
    private static final MyImageFactory myFactory = new MyImageFactory(); 

    public ViewFactory getViewFactory() { 
     return myFactory; 
    } 

    static class MyImageFactory extends HTMLFactory { 
     public View create(Element elem) { 
      Object type = elem.getAttributes() 
           .getAttribute(StyleConstants.NameAttribute); 
      if(type == HTML.Tag.IMG) { 
       return new MyImageView(elem); 
      } else { 
       return super.create(elem); 
      } 
     } 
    } 
} 

class MyImageView extends ImageView { 
    MyImageView(Element elem) { 
     super(elem); 
    } 

    protected void setPropertiesFromAttributes() { 
     super.setPropertiesFromAttributes(); 
     try { 
      ImageView.class.getDeclaredField("vAlign").set(this, new Float(0.75f)); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

不,我并不需要它。我需要将原生类替换为另一个类 – user1221483 2012-02-25 15:26:53

+0

http://javasourcecode.org/html/open-source/jdk/jdk-6u23/javax/swing/text/html/ImageView.java.html。 258-267行。没有办法设置Align = .75 f;或其他 - 这是我的问题 – user1221483 2012-02-25 18:52:55

+0

你可以重写'setPropertiesFromAttributes()'并使用反射设置'vAlign = 0.75f'。 – 2012-02-26 02:20:09