java jdk 替换本地类文件

发布于 2025-01-08 18:07:28 字数 407 浏览 3 评论 0原文

我有 ImageView.class 如何让程序使用它而不是本机 javax.swing.text.html.ImageView

javax.swing.text.html.ImageView map = new javax.swing.text.html.ImageView(); //does not work

有人告诉我有必要使用 ClassFileTransformerClassLoader,但我找不到有效的示例

I have ImageView.class how to get the program to use it instead of the native javax.swing.text.html.ImageView?

javax.swing.text.html.ImageView map = new javax.swing.text.html.ImageView(); //does not work

I was told that it is necessary to use ClassFileTransformer and ClassLoader, but I can not find a working examples

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

还给你自由 2025-01-15 18:07:28

我认为你真正想做的是......

  1. 扩展 HTMLEditorKit 并覆盖 getViewFactory()
  2. 让它返回一个扩展 HTMLEditorKit.HTMLFactory 的类code>
  3. 在该类中,重写 create() 以返回 的自定义视图。和 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();
        }
    }
}

I think that what you really want to do is to...

  1. Extend HTMLEditorKit and override getViewFactory()
  2. Have it return a class that extends HTMLEditorKit.HTMLFactory
  3. In that class, override create() to return your custom view for <img> and super.create() otherwise

Like this:

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();
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文