public void addRadioButton(String string, final int size) {
JRadioButton radioButton=new JRadioButton(string);
group.add(radioButton);
panel.add(radioButton);
ActionListener Listener=new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
label.setFont(new Font("Serif",Font.BOLD,size));
}
};
radioButton.addActionListener(Listener);
}
上述函数中size参数为什么不可以把final去掉,去掉就报错,与Font有什么具体联系没?

解决方案 »

  1.   

    应该与Font的构造函数,参数定义有关,可以贴下代码帮你看下
      

  2.   

    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 的磅值大小
    从以下版本开始: 
    JDK1.0 
    另请参见:
    GraphicsEnvironment.getAllFonts(), GraphicsEnvironment.getAvailableFontFamilyNames()--------------------------------------------------------------------------------API中没有提到 Size要用常量传值啊?
      

  3.   

    package Unit9.RadioButton;import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.ButtonGroup;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;public class RadioButtonTest { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    EventQueue.invokeLater(new Runnable(){
    public void run(){
    RadioButtonFrame frame=new RadioButtonFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }); }}
    class RadioButtonFrame extends JFrame{
    private JPanel panel;
    private JLabel label;
    private ButtonGroup group;
    public RadioButtonFrame(){
    setTitle("RadioButtonFrame");
    setSize(400,400);

    setLayout(new BorderLayout());
    label=new JLabel("The quick brown fox...");
    add(label,BorderLayout.CENTER);

    panel=new JPanel();
    group=new ButtonGroup();

    addRadioButton("Small",8);
    addRadioButton("Medium",12);
    addRadioButton("Large",16);
    addRadioButton("Extra large",20);



    add(panel,BorderLayout.SOUTH);
    }
    public void addRadioButton(String string, final int size) {
    JRadioButton radioButton=new JRadioButton(string);
    group.add(radioButton);
    panel.add(radioButton);
    ActionListener Listener=new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    label.setFont(new Font("Serif",Font.BOLD,size));
    }
    };
    radioButton.addActionListener(Listener);
    }
    }全部代码在这里,不怕麻烦就看下!!