【发布时间】:2015-04-14 07:13:03
【问题描述】:
我有一个扩展 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");
在这段代码中,我调用了 5 次类 UtilitySwing 来计算标签的字体。我想是否可以使用单例模式调用一次 UtilitySwing 来计算字体。
为此,也可以在主类中创建字体并将其设置为所有标签,但我想创建一个 jar 库,用户不必担心设置字体。
【问题讨论】:
-
您可以在创建标签之前调用
UtilitySwing.getLabelFont()并设置每个标签的font属性。现在,我要么考虑创建工厂方法,要么考虑创建循环...... -
如果所有标签都是为了获得相同的字体,您可以使用类似
UIManager.put("Label.font", UtilitySwing.getLabelFont())和所有JLabels 将自动继承字体... -
你为什么要这样做?您在该类中唯一的方法是静态的,因此在那里实现单例模式将是多余的。
-
我知道,但我不想要这个。我希望用户创建 LabelFormat(一、二、三),而不是每次使用我构建的方法设置字体
-
那你现在做的有什么问题?
标签: java swing singleton jlabel