JAVA里事件关联采用的监听机制
事件开发步骤:
1. 确定事件源
2. 确定监听器
3. 注册:建立事件源和监听器的联系
代码演示
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame extends JFrame implements ActionListener {
//取文本框的内容,必须把文本框做成属性
private loveTxt nameTxt=new loveTxt("姓名",200,150,this);
public MyFrame() {
this.setLayout(null);
// 方法1
JButton j = new JButton("确定");
j.setBounds(100, 100, 60, 40);
// 注册,实现按钮与监听器的关联,此方法为类库方法,多态调用
j.addActionListener(new MyEvent());
this.add(j);
// 方法2 另外建一个lovoButton类 此类是继承按钮的窗口类,同时也是实现监听的接口,this表示
lovoButton l = new lovoButton("提交", 200, 200, this);
l.addActionListener(this);
// 方法3 使用直接书写匿名内部类,一般使用此种方式创建监听
lovoButton l1 = new lovoButton("添加", 250, 250, this);
l1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("匿名内部类");
}
});
//获取设置文本框内容
lovoButton l2=new lovoButton("加入", 300, 300, this);
l2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取文本框数据getText
String info=nameTxt.getText();
System.out.println(info);
// //设置文本框数据
// nameTxt.setText("ttt");
}
});
this.setVisible(true);
this.setSize(600, 400);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
}
public static void main(String[] args) {
MyFrame m = new MyFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("类继承窗体并实现事件关联");
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//实现监听接口
public class MyEvent implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("事件关联");
}
}
import java.awt.Container;
import javax.swing.JButton;
//按钮组件
public class lovoButton extends JButton{
public lovoButton(String txt,int x,int y,Container con){
this.setText(txt);
this.setBounds(x, y, 60, 40);
con.add(this);
}
}
import java.awt.Container;
import javax.swing.JLabel;
import javax.swing.JTextField;
//文本框组件
public class loveTxt extends JTextField{
public loveTxt(String text,int x,int y,Container con) {
JLabel j1=new JLabel(text);
j1.setBounds(x, y, 80, 20);
con.add(j1);
this.setBounds(x+80, y, 120, 20);
con.add(this);
}
}
内部类中访问外部类对象:外部类名.this.
内部类能访问属性,不能访问局部变量,所以只要要操作的事件关联的文本框和标签都需设置成属性
如果事件当中要用到的就尽量做成属性(成员变量)
切换窗体需要先卸载当前窗体,需要使用 dispose方法 为卸载当前窗体
网友评论