Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字体,如何扩展它们_Java_Fonts_Extend - Fatal编程技术网

Java 字体,如何扩展它们

Java 字体,如何扩展它们,java,fonts,extend,Java,Fonts,Extend,我想知道是否有一种扩展字体类的方法,可以通过createFont和deriveFont方法返回自己的字体类。我是说像这样的 public class MyFont extends Font { // Constructor public MyFont (...) { super(...); } // createFont method public static MyFont createFont (...) { //

我想知道是否有一种扩展字体类的方法,可以通过createFont和deriveFont方法返回自己的字体类。我是说像这样的

public class MyFont extends Font {

    // Constructor
    public MyFont (...) {
        super(...);
    }

    // createFont method
    public static MyFont createFont (...) {
        // body
    }

    // deriveFont method
    public static MyFont deriveFont (...) {
        // body
    }
}
我试过了,但是我找不到任何字体,当我这样做的时候,我得到的字体是默认的(我的意思是“对话框”)


这样做的原因是为了最大限度地减少其VM的后续Java发行版的最终更改所产生的影响

这是上面调用的代码:

MyFont onePoint=MyFont.createFont(MyFont.TRUETYPE_FONT,fontStream, size); 
然后在MyFont中,我编码:

public static MyFont createFont (int i, InputStream io, int size) throws FontFormatException, IOException { 
    Font font = Font.createFont(i, io); 
    MyFont kfont = new
        MyFont(font.getName(),font.getStyle(),font.getSize()); 
    return kfont;
}

第0次。若有人想将通用字体传递给您的代码,而您要求参数是MyFont的实例,该怎么办。这有实际意义吗?您尝试使用继承来调整一些不适合JavaOO范式的生命周期协议(本例中为对象创建)。改用工厂方法/原型

第一。createFont()不可重写,因为它是静态的。您可以在类中提供自己的版本,但使用相同的方法名可能会混淆代码的其他用户(以及以后的用户)

第二。在为createFont()和可能的新版本的deriveFont()提供一些快捷方式的同时,您不会避免与要控制其更改的API进行链接,因此,如果java实现发生更改,您无论如何都必须重新编码/重新编译。正确的依赖性避免涉及一些反射和字符串编码的类名,捕获大量ClassNotFound异常以及API更改时可能发生的其他情况。你不会想要的。句号

三,。放松点,真的,这段代码相当稳定,你的应用程序过时和从头重写的可能性比任何人都要大,甚至比任何人都不赞成这些方法,更不用说删除它们了。这远远超过了2012年世界末日(或任何其他比宇宙热死更接近的日期)


总而言之,只需添加两个易于区分的静态快捷方式:链接到Font.creatFont()的MyFonts.create()和链接到Font.derive(其他参数)的另一个MyFonts.derive(字体字体字体,其他参数)。保持简单,伙计,并密封MyFonts()构造函数,以表明这是一个工厂/实用程序类。

为什么要这样做?你说的“无法检索任何字体”是什么意思?请举例说明你是如何使用你的类的。@Andres:我认为你根本不应该扩展
Font
。我认为没有理由仅仅为了添加一个简单的实用方法而这样做。只需将该实用程序方法添加到您的某个
FontUtil
类中,不要尝试扩展
Font
“这样做的原因是为了最大限度地减少其VM的后续Java发行版的最终更改所产生的影响。”我的意思是,如果我也这样做,我就可以检索上面编写的字体,而不是MyFont,一切正常,当尝试包装字体类时会出现问题。