按钮和文本框事件监听

本文详细介绍了Java中的事件监听机制,包括按钮(Button)、文本输入框(TextField)的事件处理,以及面向对象编程中OOP原则的应用,以实例展示了如何在计算器应用中使用ActionListener和组合设计模式。
摘要由CSDN通过智能技术生成
  • 事件监听:当某个事情发生的时候,干什么

一、按钮Button监听

public class TestActionEvent {
    public static void main(String[] args) {
        //按下按钮,触发一些事件
        Frame frame = new Frame();
        //弹窗的监听事件
       /* frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
               System.exit(0);
            }
        });*/
        Button button = new Button();
        //按钮的监听事件
        //因为addActionListener 需要一个ActionListener,所以我们需要构造一个ActionListener
        /*button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
​
            }
        });*/
        MyActionListener myActionListener = new MyActionListener();
        button.addActionListener(myActionListener);
        frame.add(button,BorderLayout.CENTER);
        frame.pack();
        windowsClose(frame);//关闭窗口
        frame.setVisible(true);
​
​
​
​
    }
​
    //关闭窗体的事件
    private static void windowsClose(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
​
​
}
​
//事件监听
class MyActionListener implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaa");
    }
}
  • 多个按钮监听一个事件

public class TestActionTwo {
    public static void main(String[] args) {
        Frame frame = new Frame();
        //两个按钮,实现同一个监听
        //开始    停止
        Button start = new Button("start");
        Button stop = new Button("stop");
​
        //可以显示的定义出发会返回的命令,如果不显示定义,则会走默认的值!
        //可以多个按钮只写一个监听类
        stop.setActionCommand("button2-stop");
​
        MyMonitor myMonitor = new MyMonitor();
        start.addActionListener(myMonitor);
        stop.addActionListener(myMonitor);
        frame.add(start,BorderLayout.NORTH);
        frame.add(stop,BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.pack();
​
​
    }
}
​
​
class MyMonitor implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //e.getActionCommand();获取按钮的信息
        System.out.println("msg  =>"+ e.getActionCommand());
    }
}

二、输入框TextField监听

public class TestText01 {
    public static void main(String[] args) {
        //启动
        new MyFrame();
    }
}
​
class MyFrame extends Frame{
    public MyFrame(){
        TextField textField = new TextField();
        add(textField);
​
        //监听这个文本框输入的文字
        MyActionListener myActionListener = new MyActionListener();
        //按下enter就会触发这个输入框的监听事件
        textField.addActionListener(myActionListener);
        //设置替换编码
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }
}
​
class MyActionListener2 implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField source = (TextField)e.getSource();//获得一些资源,返回到一个对象
        System.out.println(source.getText()); //获得输入框的文本
        source.setText("");
    }
}

OOP原则:组合大于继承


三、计算机小Demo

public class TestCalc {
    public static void main(String[] args) {
        new Calculator();
    }
}
​
​
//计算器类
class Calculator extends Frame{
     public Calculator(){
         //3个文本框
         TextField textField1 = new TextField(10);//字符数
         TextField textField2 = new TextField(10);//字符数
         TextField textField3 = new TextField(10);//字符数
​
         //1个按钮
         Button button = new Button("=");
         button.addActionListener(new MyCalculatorListener(textField1,textField2,textField3));
         //1个标签
         Label label = new Label("+");
​
         //布局
         setLayout(new FlowLayout());
         add(textField1);
         add(label);
         add(textField2);
         add(button);
         add(textField3);
​
         pack();
         setVisible(true);
     }
}
​
//监听器类
class MyCalculatorListener implements ActionListener{
    //获取三个变量
    public TextField num1,num2,num3;
    public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
        this.num1=num1;
        this.num2=num2;
        this.num3=num3;
    }
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //1.获得加数和被加数
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        //2.将这个值 + 法运算后放到第三个框
        num3.setText(n1+n2+"");
        //3.清除前两个框
        num1.setText("");
        num2.setText("");
    }
}
  • 改造:

//简易计算器
public class TestCalc {
    public static void main(String[] args) {
        new Calculator().loadFrame();
    }
}
​
​
//计算器类
class Calculator extends Frame{
    //获取三个变量
    public TextField num1,num2,num3;
    public void loadFrame(){
            //3个文本框
             num1 = new TextField(10);//字符数
             num2 = new TextField(10);//字符数
             num3 = new TextField(10);//字符数
​
            //1个按钮
            Button button = new Button("=");
            button.addActionListener(new MyCalculatorListener(this));
            //1个标签
            Label label = new Label("+");
​
            //布局
            setLayout(new FlowLayout());
            add(num1);
            add(label);
            add(num2);
            add(button);
            add(num3);
​
            pack();
            setVisible(true);
​
     }
}
​
//监听器类
class MyCalculatorListener implements ActionListener{
    Calculator calculator=null;
​
    public MyCalculatorListener(Calculator calculator){
      this.calculator =calculator;
    }
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //1.获得加数和被加数
        int n1 = Integer.parseInt(calculator.num1.getText());
        int n2 = Integer.parseInt(calculator.num2.getText());
        //2.将这个值 + 法运算后放到第三个框
        calculator.num3.setText(n1+n2+"");
        //3.清除前两个框
        calculator.num1.setText("");
        calculator.num2.setText("");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一:使用匿名内部类的形式进行设置       1.首先需要得到id,即必须清楚button的id值。        2.使用setOnClickListener,如下图所示    二:在XML文件中定义OnClick属性,在java代码中对应方法。       在button下加上如下代码android:onClick=skip(skip即为方法对应的名字,然后在java代码中在定义具体的方法)                 实现的结果如下: --------------------- 作者:xd1501013 来源:CSDN 原文:https://blog.csdn.net/xd15010130025/article/details/77604329 版权声明:本文为博主原创文章,转载请附上博文链接! Button按钮四种监听(二) 继续上次的,我们接下来要学习另外两种方式,三:Activity实现onClickListener接口;四:其他类实现onClickListener接口。    三:Activity实现onClickListener接口      1.直接在Activity上添加          public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(this); } 再创建方法      public void onClick(View v) { // TODO 自动生成的方法存根 Log.i("tag", "点击了button按钮"); } 实现效果    四:其他类实现onClickListener接口       1.创建一个其他类 class mylistener implements OnClickListener{ @Override public void onClick(View v) { // TODO 自动生成的方法存根 Log.i("tag", "点击了button按钮"); } }      二: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(new mylistener()); } 即可实现。 如果两个按钮怎么办????     用v.getId得到id值,然后用case来处理不同的情况.   --------------------- 作者:xd1501013 来源:CSDN 原文:https://blog.csdn.net/xd15010130025/article/details/77803332 版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值