情况是这样的,我定义两个FRAM,f1是登陆界面,上面有一个按钮b,点击后进入f2界面.
这时要监听按钮b,它要做的事情是
1.把f1上输入的内容以单选按钮的形式放到f2上 <==已实现
2.查询表,把表里的名单也以单选按钮的样子放到f2上 <==已实现
3.监听每个单选按钮,当选种某个按钮,把其内容放到label中 <===出现问题
提示错误:
"CHAT.java": addFocusListener(java.awt.event.FocusListener) in java.awt.Component cannot be applied to (<anonymous class of java.awt.event.ActionListener>) at line 116, column 15
当我把单选按钮的监听拿出来,就不会有这个错误,但是有以外一个错误,提示空指针,因为程序刚开始运行的时候f2还没显示出来,单选按钮自然不存在,可是已经监听,不可用.
如果我加个判断
if( f.isShowing())
{
单选择按钮监听
}
这样第一次编译通过了,可是当进入f2的时候,这条语句就不会在执行,所以还是失败.
下面是B的监听代码,红色字是出错部分,有些变量我设全局的这里没有.
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
n = name.getText().trim();
if (n.length() != 0) {
f0.setVisible(false);
f0.dispose();
all = new Checkbox("所有人", nlst, true);
all.getLabel();
n1 = new Checkbox(n, nlst, false);
n1.getLabel();
pr.add(all); //显示“所有人”
pr.add(n1); //在系统中显示自己
all.addFocusListener(this);
n1.addFocusListener(this);
//连接数据库,添加自己信息及显示有所人
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:namelst");
Statement state = con.createStatement();
state.executeUpdate("INSERT INTO namelst VALUES('" + n +
"','127.0.0.1')");
ResultSet rs = state.executeQuery("SELECT * FROM namelst");
while (rs.next()) {
String u_id = rs.getString("user_id");
if (!n.equals(u_id)) {
Checkbox u_lst=new Checkbox(u_id,nlst,false);
pr.add(u_lst);
}
}
}
catch (Exception d) {
System.out.println("Exception:" + d.getMessage());
}
lab1.setText(n);
f.setVisible(true);
}
}
});
----------------解决方案--------------------------------------------------------
你当然会错了,你在 all.addFocusListener(this);
n1.addFocusListener(this);
都用了this这个关键字,这个字的意思是代表当前类的对象
可是你的类是匿名内部类,并且这个类实现的是ActionListener的接口.
你这个时候应该把参数传对来
如果你是外部类实现了FocusListener的话可以这样写
all.addFocusListener(CHAT.this);
如果你的CHAT类实现了FocusListener
----------------解决方案--------------------------------------------------------
非常,非常感谢!
关于监听的问题已经困扰我一下午了.
还有个小问题,label怎么才能大呢?我把它放在Panel (默认布局)中,Panel放在f2的南布,label比较多大概10个字,就放不下了,可是label似乎没有改变大小的方法.
该怎么办?
----------------解决方案--------------------------------------------------------
label大有什么用,你的外面的面板也要大啊
你直接setFont就可以变大了
----------------解决方案--------------------------------------------------------
我发现定义的时候 Label lab2 = new Label(" ");
这样就大了,后来修改的问题就能放下了
不过那样定义真是很难看
----------------解决方案--------------------------------------------------------
面板setFont吗?
setFont()里面好象不是填数字的,要什么参数?
----------------解决方案--------------------------------------------------------
不需要这样定义的,直接定义JLabel lab=new JLabel();就可以了
还有,现在做GUI界面最好不要用AWT里面的东西了,最好是用swing包里的东西
----------------解决方案--------------------------------------------------------
("这里是让你放 你Lable上所显示的字的 ") 所以你的Lable的大小会跟着字的长度变的
----------------解决方案--------------------------------------------------------
非常谢谢大家的帮助:)
解决问题真的好开心
我学的东西太浅了,而且练习少,东西记得不牢,还要慢慢来.
----------------解决方案--------------------------------------------------------
欢迎常来来论坛,但是不要重复发帖
----------------解决方案--------------------------------------------------------