如何分离监听类?

chenluozhi 2010-10-22 05:25:13
我以前写代码的时候,都是把界面和监听类写在同一个文件里边的,不知道这样好不好。现在回来看看以前的课程设计,想把里边的界面和监听分离出来。本人分离 想到的方法是 对象的传递 ;也就是让监听类持有节目类的一个引用,不过这样搞起来,居然要把界面类里边的某些变量 变为 public 属性,很不爽!

听不懂我说什么的就按你自己的方法吧,我把简单的代码给大家,希望有高人指点,谢谢


import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Login extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton21 = null;

public Login(){
initialize();
}

private void initialize() {

this.setResizable(false);
this.setSize(287, 375);
this.setTitle("欢迎登陆");

jButton21 = new JButton();
jButton21.setBounds(new Rectangle(21, 312, 78, 26));

jContentPane = new JPanel();// 新建jPanel面板
jContentPane.setLayout(null);
jContentPane.add(jButton21, null);
this.setContentPane(jContentPane);

btnListener btn = new btnListener();
jButton21.addActionListener(new btnListener());


}

/*
* 监听类,就是要把这段代码,分离出去,写在另一个文件里!
*/
public class btnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jButton21) {
System.out.print("响应成功");
}
}
}
/**
* 主函数模块
*/
public static void main(String[] args) {
Login login = new Login();
login.setVisible(true);
}
}


...全文
100 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huntor 2010-10-22
  • 打赏
  • 举报
回复
实现为内部类
chenluozhi 2010-10-22
  • 打赏
  • 举报
回复
我是楼主,我发现好多人没看懂我的问题,没看懂我意思就没必要回帖啦;我的意思是
1、有没有分离监听类的必要?
2、如果有必要,除了像我这样分类(我知道的方法,你就不要重复啦),还有没有更好的方法!谢谢
chenluozhi 2010-10-22
  • 打赏
  • 举报
回复
我是楼主,我发现好多人没看懂我的问题,没看懂我意思就没必要回帖啦;我的意思是
1、有没有分离监听类的必要?
2、如果有必要,除了像我这样分类(我知道的方法,你就不要重复啦),还有没有更好的方法!谢谢
qingtianliuyun 2010-10-22
  • 打赏
  • 举报
回复
你可以对某个组件专门写一个类,这个类实现监听类,要创建组件时就可以直接调用这个类和这个类里边的监听方法
茫茫大海 2010-10-22
  • 打赏
  • 举报
回复
个人认为,没有必要分开!如果实在要分开的话,就想楼上的一样就行了!
lijiemissfei 2010-10-22
  • 打赏
  • 举报
回复
不知道是不是你要表达的意思
lijiemissfei 2010-10-22
  • 打赏
  • 举报
回复
public class Login extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton21 = null;

public Login(){
initialize();
}

private void initialize() {

this.setResizable(false);
this.setSize(287, 375);
this.setTitle("欢迎登陆");

jButton21 = new JButton();
jButton21.setBounds(new Rectangle(21, 312, 78, 26));

jContentPane = new JPanel();// 新建jPanel面板
jContentPane.setLayout(null);
jContentPane.add(jButton21, null);
this.setContentPane(jContentPane);
//把你的JFrame对象传过去就行了。
jButton21.addActionListener(new btnListener(this));


}

public static void main(String[] args) {
Login login = new Login();
login.setVisible(true);
}
}
class btnListener implements ActionListener {
Login login;
public btnListener(Login login){
this.login=login;
}
public void actionPerformed(ActionEvent e) {
System.out.println("你可以调用login类的属性或方法了");
System.out.print("响应成功");
}
}
lijiemissfei 2010-10-22
  • 打赏
  • 举报
回复
public class Login extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton21 = null;

public Login(){
initialize();
}

private void initialize() {

this.setResizable(false);
this.setSize(287, 375);
this.setTitle("欢迎登陆");

jButton21 = new JButton();
jButton21.setBounds(new Rectangle(21, 312, 78, 26));

jContentPane = new JPanel();// 新建jPanel面板
jContentPane.setLayout(null);
jContentPane.add(jButton21, null);
this.setContentPane(jContentPane);

jButton21.addActionListener(new btnListener(this));


}
/*
* 监听类,就是要把这段代码,分离出去,写在另一个文件里!
*/

/**
* 主函数模块
*/
public static void main(String[] args) {
Login login = new Login();
login.setVisible(true);
}
}
class btnListener implements ActionListener {
Login login;
public btnListener(Login login){
this.login=login;
}
public void actionPerformed(ActionEvent e) {
System.out.println("你可以调用login类的属性或方法了");
System.out.print("响应成功");
}
}
closewbq 2010-10-22
  • 打赏
  • 举报
回复
分开根本没必要!你监听器必然是真对窗体控件的。即使分离了,也没有什么复用价值。
qybao 2010-10-22
  • 打赏
  • 举报
回复
或者你在Frame中写个public dispatchEvent(ActionEvent e),监听类直接调用Frame
引用的该方法把e传回给Frame
kebin0001 2010-10-22
  • 打赏
  • 举报
回复
寫在一起的缺點就是程序會搞得很冗長,但如果只是一次性簡單事件處理,獨立寫成一個類又有點小題大作。
所以由你這個監聽器的功能來取捨了。

如果他比較複雜,事件發生之後,還會與其他外部的類有溝通,那寫成獨立的類就蠻好的。
否則寫在原程序也就行了。
wocaonima200123 2010-10-22
  • 打赏
  • 举报
回复
???????????????
qybao 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenluozhi 的回复:]
我以前写代码的时候,都是把界面和监听类写在同一个文件里边的,不知道这样好不好。现在回来看看以前的课程设计,想把里边的界面和监听分离出来。本人分离 想到的方法是 对象的传递 ;也就是让监听类持有节目类的一个引用,不过这样搞起来,居然要把界面类里边的某些变量 变为 public 属性,很不爽!

听不懂我说什么的就按你自己的方法吧,我把简单的代码给大家,希望有高人指点,谢谢

Java cod……
[/Quote]

就像你说的,监听类加个Frame引用,里面的变量不需要变为public,可以在Frame类加个get方法
ganxu330 2010-10-22
  • 打赏
  • 举报
回复
新建一个类.用它去实现ActionListener 然后在注册监视器的时候 new 类 就可以了

62,614

社区成员

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

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