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.
为什么会有这样的错??
怎么改???
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.
为什么会有这样的错??
怎么改???
if(e.getSource()==l.Tf2)
除非你定义的是内类部
{
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("");
}
}
}
{
public void focusGained(FocusEvent e)
{
if(e.getSource()==Tf2)
{
if(Tf2.getText().equals("Name"))
Tf2.setText("");
}
}
}
你已经将这个类独立了,在这个类里面你并没有定义Tf2这个变量,当然找不到符号了。
只有在Login_User 中的non-static中才可以直接引用Fouc 与 Login_User extends 是两个独立的类 ,所以当然不能直接引用
只能如上面的网友所说先创建Login_User的实例(instance),然后 instance.Tf2 调用内部类会隐含一个外部类的实例,所以可以直接调用Tf2提醒一下 做GUI 一般用内部类,这样比较轻松,优雅