绑定监听事件的按钮运行结果错误原因及其解决方案

简介: 既然是窗口大小和按钮大小相同,那么一定是设置宽高的代码出现了问题,由于我们要使得代码冗余度降低,所以把按钮对象建在类中,所以在本类中的 this 关键字代表的就是JFrame窗体的大小,而不是按钮的大小

一、前言


在前面讲述有关监听事件的知识点时,为了能够直观看到其成效,我们用三个实例来演示了给按钮和界面绑定监听以后的效果,但是在实际自己写的过程中就遇到了一写小小的问题,对应也就是知识点的欠缺,这里我们总结一下


二、窗口大小变为按钮大小


1.错误效果展示


f740109ae3314323b88e6a4334a051f5.png


2.原因分析


既然是窗口大小和按钮大小相同,那么一定是设置宽高的代码出现了问题,由于我们要使得代码冗余度降低,所以把按钮对象建在类中,所以在本类中的 this 关键字代表的就是JFrame窗体的大小,而不是按钮的大小


3.错误代码


import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class test extends JFrame implements MouseListener {
    //创建按钮对象
    JButton jtb1 = new JButton("点击我有惊喜");
  public test(){
    //按钮设置宽高
        this.setBounds(0,0,200,50);
        //绑定鼠标事件
        jtb1.addMouseListener(this);
        //将按钮放在界面中
        this.getContentPane().add(jtb1);
  }
}


4.解决方案


解决方案也很简单,只需要把this.setBounds(0,0,200,50);改为jtb1.setBounds(0,0,200,50);即可


5.正确代码


import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class test extends JFrame implements MouseListener {
    //创建按钮对象
    JButton jtb1 = new JButton("点击我有惊喜");
  public test(){
    //按钮设置宽高
        jtb1.setBounds(0,0,200,50);
        //绑定鼠标事件
        jtb1.addMouseListener(this);
        //将按钮放在界面中
        this.getContentPane().add(jtb1);
  }
}


6.知识点


this关键字的用处是调用成员变量中的值,而不是通过就近原则调用方法里的值;这个错误所对应的知识点是【构造方法及this关键字】


三、键盘监听运行结果不同


1.错误效果展示


f740109ae3314323b88e6a4334a051f5.png


2.原因分析


虽然这个错误界面和上面很像,但是原因不同,在【Java中的键盘监听机制(含实例)】其实就有提到过,对于键盘监听,我们要给整个页面添加监听事件,而不是新建一个按钮,所以如果偷懒复制黏贴上面的代码就会出错


3.错误代码


import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class test extends JFrame implements MouseListener {
    //创建按钮对象
    JButton jtb1 = new JButton("点击我有惊喜");
  public test(){
    //按钮设置宽高
        this.setBounds(0,0,200,50);
        //绑定键盘监听事件
        this.addKeyListener(this);
        //设置界面可视化
        this.setVisible(true);
  }
}


4.解决方案


既然都没有创建按钮了,setBounds这行的代码也就可以删除了,只要删除这行代码,程序就可以运行出我们想要的结果了


5.正确代码


import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class test extends JFrame implements MouseListener {
    //创建按钮对象
    JButton jtb1 = new JButton("点击我有惊喜");
  public test(){
        //绑定键盘监听事件
        this.addKeyListener(this);
        //设置界面可视化
        this.setVisible(true);
  }
}


四、结语


这里遇到的问题都是博主在自己尝试独立写出这部分代码时碰到的一些问题,如果别的小伙伴也在写拼图小游戏的过程中遇到问题,或者有疑惑的话,欢迎在评论区留言,如果文章中有错误也可以指出,我也会及时改进

相关文章
|
5月前
|
数据管理 UED
锁屏组件新能力实现问题之注册和取消注册锁屏组件如何解决
锁屏组件新能力实现问题之注册和取消注册锁屏组件如何解决
37 0
|
7月前
|
JavaScript
大事件项目06-注册功能_点击事件和拿到数据
大事件项目06-注册功能_点击事件和拿到数据
|
7月前
|
API 开发工具 git
大事件项目23---个人中心—更换头像——调用接口保存,并让Vuex更新
大事件项目23---个人中心—更换头像——调用接口保存,并让Vuex更新
|
8月前
如何解决由引起的IQKeyboardManager部分页面返回的键盘高度比实际小或最后收到键盘隐藏通知却显示了键盘问题
如何解决由引起的IQKeyboardManager部分页面返回的键盘高度比实际小或最后收到键盘隐藏通知却显示了键盘问题
118 0
|
8月前
|
前端开发 Java Maven
属性编辑器未在PropertyEditorManager中注册?
属性编辑器未在PropertyEditorManager中注册?
|
8月前
|
开发者
在用户关闭页面时,提示用户有内容未保存-论onbeforeunload事件的用法
在用户关闭页面时,提示用户有内容未保存-论onbeforeunload事件的用法
133 0
|
JSON 前端开发 JavaScript
layui上传文件弹出请求上传接口出现异常的终极解决方案(v2.68版本、ajax底层逻辑修改、debug快速定位)
layui上传文件弹出请求上传接口出现异常的终极解决方案(v2.68版本、ajax底层逻辑修改、debug快速定位)
1555 0
|
缓存
Element 通知组件 Notification 支持同类型的提示信息只弹出一次!!!
Element 使用闭坑指南 • ElementUI 为 DatePicker 日期选择器组件添加前缀说明文字 • 生成以周统计的表头,跨月份的周算在后一个月 • Element Table 可以实现哪些常见的有用的功能 • Element UI Loading 加载组件动态变更 text 值(加载文案)
1081 0
Element 通知组件 Notification 支持同类型的提示信息只弹出一次!!!
|
小程序
小程序点击跳转页面并传入一个对象及接受
小程序点击跳转页面并传入一个对象及接受
195 0
|
小程序 API
开发技巧 | mPaaS 小程序自定义事件,如何取消注册?
在我们开发 mPaaS 小程序的过程中,如果已有小程序 API 或事件无法满足开发需求,您也可以自行扩展。
6478 0
开发技巧 | mPaaS 小程序自定义事件,如何取消注册?