[code=ActionListener listener =new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
int mode=0;
if (bold.isSelected())mode+=Font.BOLD;
if (itallic.isSelected())mode+=Font.ITALIC;
label.setFont(new Font("Serif",mode,FONTSIZE));
}
}
[/code]
请帮忙解释一下这段代码的意思,尤其是int mode=0;
if (bold.isSelected())mode+=Font.BOLD;这两句,非常感谢...

解决方案 »

  1.   

    public Font(String name,
                int style,
                int size)
    根据指定名称、样式和磅值大小,创建一个新 Font。 
    字体名称可以是字体外观名称或字体系列名称。它与样式一起使用,以查找合适的字体外观。如果指定了字体系列名称,则使用样式参数从系列中选择最合适的外观。如果指定了字体外观名称,则合并外观的样式和样式参数,以便从同一个系列查找最匹配的字体。例如,如果指定外观名称 "Arial Bold" 及样式 Font.ITALIC,则字体系统在 "Arial" 系列中寻找既是粗体又是斜体的外观,可以将字体实例与物理字体外观 "Arial Bold Italic" 相关联。将样式参数与指定外观的样式合并,而不是执行添加或减去操作。这意味着,指定粗体外观和粗体样式并不会双倍加粗字体,而指定粗体外观和普通样式也不会变细字体。 如果无法找到所要求样式的外观,则字体系统可以应用样式设计算法来获得所需的样式。例如,如果要求 ITALIC,但是没有可用的斜体外观,则可以通过算法使普通外观倾斜。 字体名称查找是区分大小写的,可以使用 US 语言环境的大小写转换规则。 如果 name 参数表示逻辑字体以外的事物,例如表示为物理字体外观或系列名称,并且无法通过实现物理字体或可兼容的替代物映射它,则字体系统会将 Font 实例映射到 "Dialog",因此,通过 getFamily 报告的字体系列名称将是 "Dialog"。 参数:
    name - 字体名称。可以是字体外观名称或字体系列名称,并且可表示此 GraphicsEnvironment 中找到的逻辑字体或物理字体。逻辑字体的系列名称有:Dialog、DialogInput、Monospaced、Serif 或 SansSerif。预定义 String 常量是为所有这些名称(如 DIALOG)而存在。如果 name 为 null,则将新 Font 的逻辑字体名称(由 getName() 返回)设置为 "Default"。
    style - Font 的样式常量。样式参数是整数位掩码,可以为 PLAIN,或 BOLD 和 ITALIC 的按位或(例如,ITALIC 或 BOLD|ITALIC)。如果样式参数不符合任何一个期望的整数位掩码,则将样式设置为 PLAIN。
    size - Font 的磅值大小Font.BOLD值是1 Font.ITALIC值是2
    按位或和加起来是等效的
      

  2.   

    字体是一个多维元素组合的整体。
    就比如说,你可以指定字体是斜体,同时还可以让它加粗显示,还可以指定它带下划线……
    所以就有了这个mode。
    你可以用
         System.out.println(Font.BOLD);
         System.out.println(Font.ITALIC);
    这样的语句看看他们的值,你会发现都是2的n次方:1,2,4,8,16……
    他们的2进制值是:00000001,00000010,00000100,00001000……
    那么,他们相加后得到的是:000001111。
    最后,你将这个mode作为参数去做成一个Font,Font根据mode的2进制值上的每一位上的值就知道你要的字体是什么样的了。比如,从右往左第一位,如果是1,那么就说明你想让字体加粗。如果是0,则不用加粗。
    从右往左第二位,如果是1,那么就说明你想让字体是斜体。如果是0,则不是斜体。
    这样的做法,你就不用去传递多个参数定义字体了,而且效率也很高。