求大神帮忙解决调用函数问题

稀里糊涂的码农 2013-07-26 12:05:54
我在用java写学生成绩管理系统,现在遇到一个问题,就是事件监听器在传事件的时候没办法传过去,我写了三个java文件,在同一个包里。
这是主函数的java文件代码:

package ManageSystem;

public class ManageSystem {
public static void main(String[] args) {
MSFrame frame=new MSFrame("学生成绩管理系统");
frame.setVisible(true);
}
}



这是MSFrame的代码,第二个java文件的代码:

package ManageSystem;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MSFrame extends JFrame{
JLabel label,lblUser,lblPassword;
JTextField tfUser,tfPassword;
JButton btnLogin;
public MSFrame(String s){
//创建系统登陆界面
super(s);
label=new JLabel("南京晓庄学院学生成绩管理系统");
lblUser=new JLabel("User:");
lblPassword=new JLabel("Password:");
tfUser=new JTextField(10);
tfPassword=new JTextField(20);
btnLogin=new JButton("Login");

Listener bm=new Listener();
btnLogin.setBackground(new Color(204,204,255));

//布局
Box box=Box.createVerticalBox();
box.add(label);
Box bh1=Box.createHorizontalBox(); //用户名User
bh1.add(lblUser);
bh1.add(Box.createHorizontalStrut(8));
bh1.add(tfUser);
box.add(bh1);
box.add(Box.createVerticalStrut(8));
Box bh2=Box.createHorizontalBox(); //密码Password
bh2.add(lblPassword);
bh2.add(Box.createHorizontalStrut(10));
bh2.add(tfPassword);
box.add(bh2);
box.add(Box.createVerticalStrut(8));
box.add(btnLogin);
box.add(Box.createVerticalStrut(8));

this.add(box);
this.setBounds(250,250,480,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


btnLogin.addActionListener(bm);

}
}



这是事件监听器的代码,第三个java文件的代码:

package ManageSystem;

import java.awt.event.*;

public class Listener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
String User="iamthemanager";
String Password="iamthemanager";
String getUser=bm.tfUser.getText();
}
}



问题在这:btnLogin.addActionListener(bm);
bm这个变量传到事件监听器的时候,就是到这句话“String getUser=bm.tfUser.getText();”的时候,说无法解析bm,我没办法从文本中得到文本框的内容,求详细的解决办法,不要太简短,小弟理解能力比较差。谢谢大神了
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 2013-07-26
  • 打赏
  • 举报
回复
引用 3 楼 lhakuma 的回复:
[quote=引用 2 楼 oh_Maxy 的回复:] 用匿名内部类试试

        btnLogin.addActionListener(new Listener(){
            public void actionPerformed(ActionEvent e) {
                String User="iamthemanager";
                String Password="iamthemanager";
                String getUser=tfUser.getText();
            }
        });
不,我现在就是要模块话,用内部类我会写,现在我要分开多个java文件。[/quote] 嗯,要不你的listener再增加一个属性:tfUser,new Listener的时候,把tfUser传进来初始化下。
huntor 2013-07-26
  • 打赏
  • 举报
回复
Listener 加上一个成员,构造时传入。
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
是用命令行操作的么?bm明显在你的class Listener中,没有定义啊?
我是用Eclipse的,不是用命令行的
  • 打赏
  • 举报
回复
引用 2 楼 oh_Maxy 的回复:
用匿名内部类试试

        btnLogin.addActionListener(new Listener(){
            public void actionPerformed(ActionEvent e) {
                String User="iamthemanager";
                String Password="iamthemanager";
                String getUser=tfUser.getText();
            }
        });
不,我现在就是要模块话,用内部类我会写,现在我要分开多个java文件。
oh_Maxy 2013-07-26
  • 打赏
  • 举报
回复
用匿名内部类试试

        btnLogin.addActionListener(new Listener(){
            public void actionPerformed(ActionEvent e) {
                String User="iamthemanager";
                String Password="iamthemanager";
                String getUser=tfUser.getText();
            }
        });
oh_Maxy 2013-07-26
  • 打赏
  • 举报
回复
是用命令行操作的么?bm明显在你的class Listener中,没有定义啊?
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
[quote=引用 3 楼 lhakuma 的回复:] [quote=引用 2 楼 oh_Maxy 的回复:] 用匿名内部类试试

        btnLogin.addActionListener(new Listener(){
            public void actionPerformed(ActionEvent e) {
                String User="iamthemanager";
                String Password="iamthemanager";
                String getUser=tfUser.getText();
            }
        });
不,我现在就是要模块话,用内部类我会写,现在我要分开多个java文件。[/quote] 嗯,要不你的listener再增加一个属性:tfUser,new Listener的时候,把tfUser传进来初始化下。[/quote] 我用“持有对方引用”的方法解决了,谢谢啊~~

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧