import java.awt.*;
import java.awt.event.*;
public class Login_User extends FocusAdapter implements ActionListener,ItemListener/////////////////////
{
Frame Fra;
TextField Tf1,Tf2,Tf3;
Checkbox Cb1,Cb2;
Choice C1,C2,C3;//C3是用于添加城市和省份的
List Ls1;
Button B1,B2;//用于C3,4的
public void Display()
{
Panel P1,P2;
CheckboxGroup Cg;
Fra=new Frame("Login_User");
Fra.setSize(580,300);
Fra.setLocation(200,140);
Fra.setBackground(Color.lightGray);
Fra.setLayout(new GridLayout(1,2));
Ls1=new List();
Fra.add(Ls1);
P1=new Panel();
P1.setLayout(new GridLayout(6,1));
Fra.add(P1);
Tf1=new TextField("1");
Tf2=new TextField("Name");
Tf2.addFocusListener(this);
Tf3=new TextField();
Cg=new CheckboxGroup();
Cb1=new Checkbox("male",Cg,false);
Cb2=new Checkbox("female",Cg,false);
C1=new Choice();
C1.addItem("jiangsu");
C1.addItem("zhejiang");
C1.addItemListener(this);
C2=new Choice();
C2.addItem("nanjing");
C3=new Choice();
C3.addItem("Privince");
C3.addItem("City");
B1=new Button("Add");
B2=new Button("Add_PC");
B1.addActionListener(this);
B2.addActionListener(this);
P1.add(Tf1);
P1.add(Tf2);
P2=new Panel();
P2.setLayout(new FlowLayout(FlowLayout.LEFT));
P2.add(Cb1);
P2.add(Cb2);
P1.add(P2);
P1.add(C1);
P1.add(C2);
P1.add(B1);//////////////////////////////////////////////////////
P1.add(C3);
P1.add(Tf3);
P1.add(B2);
Fra.addWindowListener(new WinClose());
Fra.setVisible(true);
}
   

 public void actionPerformed(ActionEvent e)
{
String str;
if(e.getSource()==B1)
{

str=Tf1.getText()+"  "+Tf2.getText();
if(Cb1.getState())
str=str+"  "+Cb1.getLabel();
if(Cb2.getState())
str=str+"  "+Cb2.getLabel();
str=str+"  "+C1.getSelectedItem();
str=str+"  "+C2.getSelectedItem();
Ls1.add(str);
Tf1.setText(""+(Integer.parseInt(Tf1.getText())+1));
}
// else if(e.getSource()==B2)
//{

// }

}

public void itemStateChanged(ItemEvent e)
{
if(C1.getSelectedIndex()==0)
{
C2.removeAll();
C2.addItem("nanjing");
C2.addItem("suzhou");
C2.addItem("wuxi");
}
if(C1.getSelectedIndex()==1)
{
C2.removeAll();
C2.addItem("hangzhou");
C2.addItem("ningbo");
C2.addItem("wenzhou");
}

}

public static void main(String[]args)
{
(new Login_User()).Display(); 
}
}
class WinClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
 class Fouc extends FocusAdapter
{
 public void focusGained(FocusEvent e)
{
   if(e.getSource()==Tf2)
   {
       if(Tf2.getText().equals("Name"))
       Tf2.setText("");
   }
}
}
错误是:F:\JAVA\Login_User.java:121: 找不到符号
符号: 变量 Tf2
位置: 类 Fouc
           if(e.getSource()==Tf2)
                             ^
F:\JAVA\Login_User.java:123: 找不到符号
符号: 变量 Tf2
位置: 类 Fouc
                   if(Tf2.getText().equals("Name"))
                      ^
F:\JAVA\Login_User.java:124: 找不到符号
符号: 变量 Tf2
位置: 类 Fouc
                   Tf2.setText("");
                   ^
3 错误Process completed.
为什么会有这样的错??
怎么改???

解决方案 »

  1.   

    你要用TF2必须先实例化Login_User 这个类 Login_User l = new Login_User();
       if(e.getSource()==l.Tf2)
    除非你定义的是内类部
      

  2.   

    如果不想做成内部类,也可以参考这样解决: class Fouc extends FocusAdapter
    {
        Login_User guiAdatper;     
        public Fouc(Login_User gui)
        {
            guiAdapter = gui;
        }

        public void focusGained(FocusEvent e)
       {
       
                if(e.getSource()==guiAdapter.Tf2)
       {
           if(guiAdapter.Tf2.equals("Name"))
           guiAdapter.Tf2.setText("");
       }
        }
    }
      

  3.   

    class Fouc extends FocusAdapter
    {
     public void focusGained(FocusEvent e)
    {
       if(e.getSource()==Tf2)
       {
          if(Tf2.getText().equals("Name"))
          Tf2.setText("");
       }
    }
    }
    你已经将这个类独立了,在这个类里面你并没有定义Tf2这个变量,当然找不到符号了。
      

  4.   

    Tf2 这个reference 是 Login_User  这个类中定义的 
    只有在Login_User  中的non-static中才可以直接引用Fouc  与 Login_User extends 是两个独立的类 ,所以当然不能直接引用
    只能如上面的网友所说先创建Login_User的实例(instance),然后 instance.Tf2 调用内部类会隐含一个外部类的实例,所以可以直接调用Tf2提醒一下 做GUI 一般用内部类,这样比较轻松,优雅