为什么不能在的JLabel的Java Swing或在上面的程序,为什么我必须把此行的“私人内部类像JMenu的JMenuBar的为什么不能JLabel的是一个内部类声明
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Chk extends JFrame
{
private JLabel lbl ;
public Chk()
{
lbl = new JLabel("StatusBar");
lbl.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
add(lbl,BorderLayout.SOUTH);
JMenuBar menubar=new JMenuBar();
JMenu file = new JMenu("File");
JMenu view = new JMenu("View");
JCheckBoxMenuItem sbar= new JCheckBoxMenuItem("Status-Bar");
sbar.setState(true);
sbar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (lbl.isVisible())
{lbl.setVisible(false);}
else
{lbl.setVisible(true);}
}});
menubar.add(file);
view.add(sbar);
menubar.add(view);
setJMenuBar(menubar);
setSize(300,200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[])
{new Chk();}
}
内部声明JLabel lbl;“
为什么我不能使用JLabel lbl = new JLabel(“Label”);
它说:“局部变量LBL从内部类访问,需要被声明为final” – subanki 2010-08-10 15:08:26
所以每当我在构造函数中使用一个变量,它需要首先宣布为私人外部?或者我必须宣布它是最终的,对吗? – subanki 2010-08-10 15:25:59
它取决于“变量”是否必须在所有类中重用。如果是这种情况,那么它必须声明为一个字段(私有的,不在方法或构造函数中)。此外,如果此字段必须用于内部类(例如您的情况下的ActionListener),则必须将其声明为final。 – 2010-08-10 16:15:24