事件关联

2018-10-02  本文已影响0人  TryCatch菌

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方法 为卸载当前窗体

上一篇 下一篇

猜你喜欢

热点阅读