Java 如何优化使用Singleton扩展JLabel的类

Java 如何优化使用Singleton扩展JLabel的类,java,swing,singleton,jlabel,Java,Swing,Singleton,Jlabel,我有一个扩展JLabel的类。这是一节课: public class LabelFormat extends JLabel { public LabelFormat(String string){ Font myFont=UtilitySwing.getLabelFont(); this.setText(string); this.setFont(myFont); } } 这是UtilitySwing类中的方法: public s

我有一个扩展JLabel的类。这是一节课:

public class LabelFormat extends JLabel {
    public LabelFormat(String string){
        Font myFont=UtilitySwing.getLabelFont();
        this.setText(string);
        this.setFont(myFont);
    }
}
这是UtilitySwing类中的方法:

public static Font getLabelFont(){
    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension screenSize = t.getScreenSize();

    double width = screenSize.getWidth();
    double height= screenSize.getHeight();
    Font myFont;
    if ((width == 1600.0) && (height == 900.0) || 
            (width == 1440.0) && (height == 900.0) || 
            (width == 1280) && (height== 800) || 
            ((width == 1280) && (height== 768)))
    {
        myFont = new Font("Century Gothic", Font.PLAIN, 14);
    }
    else if((width==1024) && (height ==600))
    {
        myFont = new Font("Century Gothic", Font.PLAIN, 12);
    }
    else if ((width == 1024) && (height== 768))
    {
        myFont = new Font("Century Gothic", Font.PLAIN, 12);
    }
    else if ((width == 800) && (height== 600))
    {
        myFont = new Font("Century Gothic", Font.PLAIN, 11);
    }
    else{
        myFont = new Font("Century Gothic", Font.PLAIN, 11);
    }   
    return myFont;
}
所以这个类找到了,但对我来说,代码不是很有效,因为如果我创建5个标签,我有:

LabelFormat label1 = new LabelFormat("Pippo");
LabelFormat label2 = new LabelFormat("Pippo");
LabelFormat label3 = new LabelFormat("Pippo");
LabelFormat label4 = new LabelFormat("Pippo");
LabelFormat label5 = new LabelFormat("Pippo");
在这段代码中,我调用类UtilitySwing的5倍来计算标签的字体。我想如果可以使用单例模式调用UtilitySwing来计算字体

为此,也可以在main类中创建字体并将其设置为all Label,但我想创建一个jar库,用户无需担心设置字体。

您可以。。。 在创建标签并设置字体属性之前,请调用UtilitySwing.getLabelFont

Font font = UtilitySwing.getLabelFont();
LabelFormat label1 = new LabelFormat("Pippo");
label1.setFont(font);
//...
但我会尝试加入工厂方法或循环,使这更容易

Font font = UtilitySwing.getLabelFont();
LabelFormat label1 = createFormatLabel("Pippo", font);
你可以。。。 使用UIManager.putlab.font、UtilitySwing.getLabelFont;设置所有JLabel使用的字体,假设您希望更改是全局的

这将引导您考虑创建一个定制的look-and-feel委托,您可以为其提供更好的控制,并且只影响LabelFormat实例

你可以。。。 缓存结果

private static Map<Dimension, Font> mapFonts = new HashMap<>(25);

public static Font getLabelFont() {
    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension screenSize = t.getScreenSize();

    Font font = mapFonts.get(screenSize);
    if (font == null) {

        double width = screenSize.getWidth();
        double height = screenSize.getHeight();
        if ((width == 1600.0) && (height == 900.0)
                        || (width == 1440.0) && (height == 900.0)
                        || (width == 1280) && (height == 800)
                        || ((width == 1280) && (height == 768))) {
            font = new Font("Century Gothic", Font.PLAIN, 14);
        } else if ((width == 1024) && (height == 600)) {
            font = new Font("Century Gothic", Font.PLAIN, 12);
        } else if ((width == 1024) && (height == 768)) {
            font = new Font("Century Gothic", Font.PLAIN, 12);
        } else if ((width == 800) && (height == 600)) {
            font = new Font("Century Gothic", Font.PLAIN, 11);
        } else {
            font = new Font("Century Gothic", Font.PLAIN, 11);
        }

        if (font != null) {
            mapFonts.put(screenSize, font);
        }
    }
    return font;
}
如果你不在乎,只是想节省时间,不要重复决策过程一次又一次…

你可以。。。 在创建标签并设置字体属性之前,请调用UtilitySwing.getLabelFont

Font font = UtilitySwing.getLabelFont();
LabelFormat label1 = new LabelFormat("Pippo");
label1.setFont(font);
//...
但我会尝试加入工厂方法或循环,使这更容易

Font font = UtilitySwing.getLabelFont();
LabelFormat label1 = createFormatLabel("Pippo", font);
你可以。。。 使用UIManager.putlab.font、UtilitySwing.getLabelFont;设置所有JLabel使用的字体,假设您希望更改是全局的

这将引导您考虑创建一个定制的look-and-feel委托,您可以为其提供更好的控制,并且只影响LabelFormat实例

你可以。。。 缓存结果

private static Map<Dimension, Font> mapFonts = new HashMap<>(25);

public static Font getLabelFont() {
    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension screenSize = t.getScreenSize();

    Font font = mapFonts.get(screenSize);
    if (font == null) {

        double width = screenSize.getWidth();
        double height = screenSize.getHeight();
        if ((width == 1600.0) && (height == 900.0)
                        || (width == 1440.0) && (height == 900.0)
                        || (width == 1280) && (height == 800)
                        || ((width == 1280) && (height == 768))) {
            font = new Font("Century Gothic", Font.PLAIN, 14);
        } else if ((width == 1024) && (height == 600)) {
            font = new Font("Century Gothic", Font.PLAIN, 12);
        } else if ((width == 1024) && (height == 768)) {
            font = new Font("Century Gothic", Font.PLAIN, 12);
        } else if ((width == 800) && (height == 600)) {
            font = new Font("Century Gothic", Font.PLAIN, 11);
        } else {
            font = new Font("Century Gothic", Font.PLAIN, 11);
        }

        if (font != null) {
            mapFonts.put(screenSize, font);
        }
    }
    return font;
}

如果您不在乎,只是想节省时间,不想重复决策过程一次又一次…

您可以在创建标签和设置每个标签的字体属性之前调用UtilitySwing.getLabelFont。现在,我可能会考虑创建一个工厂方法或循环…如果所有标签都要使用相同的字体,那么可以使用UIManager.putLabel.font、UtilitySwing.getLabelFont之类的工具,所有JLabel都会自动继承字体…为什么要这样做?该类中唯一的方法是静态的,因此在那里实现单例模式是多余的。我希望用户创建LabelFormat 1、2、3,而不是每次使用我构建的方法设置字体。那么,您现在所做的有什么问题吗?您可以在创建标签之前调用UtilitySwing.getLabelFont并设置每个标签的字体属性。现在,我可能会考虑创建一个工厂方法或循环…如果所有标签都要使用相同的字体,那么可以使用UIManager.putLabel.font、UtilitySwing.getLabelFont之类的工具,所有JLabel都会自动继承字体…为什么要这样做?该类中唯一的方法是静态的,因此在那里实现单例模式是多余的。我希望用户创建LabelFormat 1、2、3,而不是每次使用我构建的方法设置字体。那么您现在所做的有什么问题吗?我已经使用了这个解决方案,对我来说是最好的:使用UIManager.putLabel.font,UtilitySwing.getLabelFont;设置所有jlabel使用的字体,假设您希望更改是全局的,很高兴它能有所帮助;我用过这个解决方案,对我来说是最好的:使用UIManager.putLabel.font,UtilitySwing.getLabelFont;设置所有jlabel使用的字体,假设您希望更改是全局的,很高兴它能有所帮助;