Java动作监听器

这篇文章讲解一下如何实现登录界面上按钮的响应功能。

1.

所需的Java源代码开发包 源代码库

import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

2.以数字炸弹游戏为例:

3.

一。

1.先创建一个界面类NumBomUI,在创建一个showUI方法,最后创建一个程序入口,在程序入口中创建一个这个类NumBomUI的对象并调用方法showUI

2.创建一个窗体Frame,完成窗体上的组件,并把组件加载到窗体上。

代码如下:

public class NumBomUI {

    public void  showUI(){
        //窗体
        JFrame jf = new JFrame();
        jf.setTitle ("登录界面 login interface 作者:nhq");//标题
        jf.setSize (400, 450);//大小
        jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// 关闭按钮
        FlowLayout flowLayout = new FlowLayout ();// 创建一个布局对象
        jf.setLayout (flowLayout);
        //标题
        JLabel tilJla = new JLabel("数字炸弹");
        //字体
        Font font = new Font ("黑体",Font.BOLD,80);
        tilJla.setFont(font);
        //标签
        JLabel numJla = new JLabel("请输入你猜的数字");
        //输入框
        JTextField numJte = new JTextField(30);
        //按钮
        JButton numBtn = new JButton("确定");
        //添加到窗体上
        jf.add(tilJla);
        jf.add(numJla);
        jf.add(numJte);
        jf.add(numBtn);
        //可视化
        jf.setVisible (true);
        
    }


    public static void main(String[] args){
       NumBomUI numBomUI = new NumBomUI();
       numBomUI.showUI();
    }
}

二。

在开发界面上创建BtnAction对象btnAction,并注册给按钮对象btn。

BtnAction btnAction = new BtnAction();
btn.addActionListener(btnAction);

三。

1.自行创建一个类BtnAction实现ActionListener。

2.在这个类中重写ActionListener中的方法actionPerformed方法。

3.运用二中的操作。

代码如下:

  public class BtnAction implements ActionListener {
        

        public void actionPerformed(ActionEvent e) {
            

        }
}

四。

在方法中编写数字炸弹的代码,并在此类中编写封装的窗体代码。

代码如下:

 JTextField numJtf2;
        // 游戏需要的数据
        int bomNum = -1;
        int min = -1;
        int max = 100;
        // 随机数工具类
        Random random = new Random();
        int count = 1;

        public void actionPerformed(ActionEvent e) {
            System.out.println("按钮被点击了");
            //获取输入的数据
            String numText = numJtf2.getText();
            System.out.println(numText);
            //初始化数据
            if (bomNum == -1) {
                bomNum = random.nextInt(100);
                System.out.println("炸弹已经生成");
                jf.setVisible(false);
                jf = new JFrame();
            }
            //将数字文本 变为整数型变量
            int numInput = Integer.parseInt(numText);
             //判断输入数据是否符合要求
            if (numInput <= min || numInput >= max) {
                System.out.println("输入的数字不在当前范围(" + min + "-" + max + ")内。");
                msgFrame("输入的数字不在当前范围(" + min + "-" + max + ")内。");
                return;
            }
            //判断输入数据与数字炸弹的大小
            if (numInput == bomNum) {
                System.out.println("恭喜你猜中了,炸弹是" + bomNum);
                msgFrame("恭喜你猜中了,炸弹是" + bomNum);
                bomNum = -1;
                min = -1;
                max = 100;
                count = 0;
                numJtf2.setText("");
            } else if (numInput < bomNum) {
                System.out.println("猜小了");
                msgFrame("猜小了");
                min = numInput;
            } else {
                System.out.println("猜大了");
                msgFrame("猜大了");
                max = numInput;
            }

        }

        JFrame jf = new JFrame();(只进行一个窗体的运行)


        // 封装
        public void msgFrame(String msg) {
            jf.setTitle("显示信息");
            jf.setSize(400, 380);
            jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);(注意此处的区别)
            FlowLayout flowLayout = new FlowLayout();
            jf.setLayout(flowLayout);


            JLabel jLabel = new JLabel(count + ":" + msg);
            count++;

            Dimension dim = new Dimension(300, 40);
            jLabel.setPreferredSize(dim);

            Font font = new Font("黑体", Font.BOLD, 30);
            jLabel.setFont(font);

            jf.add(jLabel);
            jf.setLocationRelativeTo(null);
            jf.setVisible(true);

        }

将按钮对象的地址传递给监测器中的对象numJtf2

代码如下:

tnAction.numJtf2=numJte;

六.

进行各部分代码和类的整合。

代码如下:

package nhq0816;
import java.awt.*;
import javax.swing.*;
public class NumBomUI {

    public void  showUI(){
        //窗体
        JFrame jf = new JFrame();
        jf.setTitle ("登录界面 login interface 作者:nhq");//标题
        jf.setSize (400, 450);//大小
        jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// 关闭按钮
        FlowLayout flowLayout = new FlowLayout ();// 创建一个布局对象
        jf.setLayout (flowLayout);
        //标题
        JLabel tilJla = new JLabel("数字炸弹");
        //字体
        Font font = new Font ("黑体",Font.BOLD,80);
        tilJla.setFont(font);
        //标签
        JLabel numJla = new JLabel("请输入你猜的数字");
        //输入框
        JTextField numJte = new JTextField(30);
        //按钮
        JButton numBtn = new JButton("确定");
        //添加到窗体上
        jf.add(tilJla);
        jf.add(numJla);
        jf.add(numJte);
        jf.add(numBtn);
        //可视化
        jf.setVisible (true);
        //在开发界面上创建BtnAction对象btnAction,并注册给按钮对象btn。(实现只要按动按钮就可以执行BtnAction中的代码)
        BtnAction btnAction= new BtnAction ();
        numBtn.addActionListener (btnAction);//(实现只要按动按钮就可以执行BtnAction中的代码)
// 传递对象的地址 给  监测器中的对象numJtf2
        btnAction.numJtf2=numJte;
    }


    public static void main(String[] args){
       NumBomUI numBomUI = new NumBomUI();
       numBomUI.showUI();
    }
}
package nhq0816;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;


    public class BtnAction implements ActionListener {
        JTextField numJtf2;
        // 游戏需要的数据
        int bomNum = -1;
        int min = -1;
        int max = 100;
        // 随机数工具类
        Random random = new Random();
        int count = 1;

        public void actionPerformed(ActionEvent e) {
            System.out.println("按钮被点击了");
            //获取输入的数据
            String numText = numJtf2.getText();
            System.out.println(numText);
            //
            if (bomNum == -1) {
                bomNum = random.nextInt(100);
                System.out.println("炸弹已经生成");
                jf.setVisible(false);
                jf = new JFrame();
            }
            //将数字文本 变为整数型变量
            int numInput = Integer.parseInt(numText);

            if (numInput <= min || numInput >= max) {
                System.out.println("输入的数字不在当前范围(" + min + "-" + max + ")内。");
                msgFrame("输入的数字不在当前范围(" + min + "-" + max + ")内。");
                return;
            }

            if (numInput == bomNum) {
                System.out.println("恭喜你猜中了,炸弹是" + bomNum);
                msgFrame("恭喜你猜中了,炸弹是" + bomNum);
                bomNum = -1;
                min = -1;
                max = 100;
                count = 0;
                numJtf2.setText("");
            } else if (numInput < bomNum) {
                System.out.println("猜小了");
                msgFrame("猜小了");
                min = numInput;
            } else {
                System.out.println("猜大了");
                msgFrame("猜大了");
                max = numInput;
            }

        }

        JFrame jf = new JFrame();


        // 封装
        public void msgFrame(String msg) {
            jf.setTitle("显示信息");
            jf.setSize(400, 380);
            jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            FlowLayout flowLayout = new FlowLayout();
            jf.setLayout(flowLayout);


            JLabel jLabel = new JLabel(count + ":" + msg);
            count++;

            Dimension dim = new Dimension(300, 40);
            jLabel.setPreferredSize(dim);

            Font font = new Font("黑体", Font.BOLD, 30);
            jLabel.setFont(font);

            jf.add(jLabel);
            jf.setLocationRelativeTo(null);
            jf.setVisible(true);

        }
}

以上就是以数字炸弹为例的Java动作监听器的大概步骤。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值