测试 JButton 时,我的 lambda 表达式有效,但 actionPerformed 无效

2023-11-29

我正在按照以下步骤第一次学习如何使用 Java Swingtutorial在YouTube上。我已经到达涵盖按钮的部分,并且一直按照代码进行操作。但是,在尝试测试按钮时,当我使用actionPerformed方法,我的按钮不会打印出这个词。

您可以在此处找到该测试的原始代码:

主程序.java

package com.learnjava;
public class Main {

    public static void main(String[] args) {

        new MyFrame();

    }
}

MyFrame.java

package com.learnjava;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends JFrame implements ActionListener{
    
    JButton button;

    MyFrame() {

        JButton button = new JButton();
        button.setBounds(200, 100, 100, 50);
        button.addActionListener(this);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 500);
        this.setLayout(null);
        this.setVisible(true);
        this.add(button);


    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == button) {
            System.out.println("test");
        }
        
    }
}

每当我使用前面的代码按下按钮时,它都不会打印出“test”一词。如果我使用 lambda 表达式,它就会起作用。

MyFrame.java(用 lambda 表达式更新)

package com.learnjava;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends JFrame implements ActionListener{
    
    JButton button;

    MyFrame() {

        JButton button = new JButton();
        button.setBounds(200, 100, 100, 50);
        button.addActionListener(e -> {System.out.println("test");}); // updated with lambda expression

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 500);
        this.setLayout(null);
        this.setVisible(true);
        this.add(button);


    }
}

我一直试图在网上寻找前一个代码不起作用的原因。我见过一个question但没有得到答复。虽然我可以选择使用 lambda 表达式,但我仍然想了解如果我做错了什么,如何正确编写以前的代码。提前谢谢您!

注意:如果由于某种原因相关,我使用的 IDE 是 IntelliJ,我的 JDK 是版本 12。


Change:

JButton button = new JButton(); 

To:

button = new JButton();

第一个是隐藏类属性的局部变量。

第二个类也有同样的问题,但由于它(按钮创建、添加监听器、将其添加到 GUI)都是在一个代码段中完成的,因此从不使用 class 属性这一点并不明显。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试 JButton 时,我的 lambda 表达式有效,但 actionPerformed 无效 的相关文章

随机推荐

  • 如何在 GCP BigQuery 联合查询中使用查询参数

    我有一个基于 gcp 的环境 我在 gcp BigQuery 中使用标准 SQL 脚本 并在 cloudsql MySql 中使用联合查询 联合查询从cloudsql mysql数据库中选择数据 我需要根据依赖于 BigQuery 中数据的
  • 我可以使用Environment.GetEnvironmentVariable方法从Azure应用程序设置中读取环境变量吗?

    我正在将 Firebase SDK 添加到服务器 第一步是设置 GOOGLE APPLICATION CREDENTIALS 环境变量 所以我在中设置环境变量Azure 服务 gt 配置 gt 应用程序设置 我检查了环境变量kudu too
  • GNU GCC 编译器错误“main 的多重定义”

    我是 ubuntu 新手 现在我需要用 C 开发我的作业 我正在使用 codeblocks IDE 编写 C 程序 每当我在其中编译某些内容时 都会出现以下错误 multiple definition of main warning con
  • 在循环中使用innerHTML无法正确显示json结果集

    我使用 HTML onclick 事件来调用一个函数 该函数将读取包含 JSON 语法的 Javascript 字符串并输出结果 但仅显示最后一个结果 var resorts skiResorts resortName Afton Alps
  • firebase 逆序排序

    var playersRef firebase database ref team mapping playersRef orderByChild score limitToFirst 7 on child added function d
  • 使用 OU 的部分路径在 Active Directory 中搜索 OU

    AD 查询语法中是否有一种方法可以通过搜索 OU 的部分路径来查找 OU 的完整路径 例如 我的 OU 的完整路径是 OU Clerks OU OfficeA OU Administration DC domain DC local 现在
  • gif 动画在 Chrome 和 Firefox 中仅循环一次

    我有一个 gif 动画 我想在页面加载时随时显示它 当我在浏览器外部查看图像时 图像无限循环并且工作得很好 但每当我在浏览器中显示图像时 动画仅循环一次 有人对让图像无限循环有什么建议吗 目前 我这样做只是为了使图像出现 这确实使它出现 但
  • 在 R 中读取两行标题

    当标题有两行必要的标题时 将文件读入 R 的最佳方法是什么 这种情况经常发生在我身上 因为人们经常使用一行作为列名称 然后在其下面包含另一行作为测量单位 我不想跳过任何事情 我希望将名称和单位保留下来 这是什么具有两个标头的典型文件可能如下
  • 无法使用 gethostbyname() 获取本地 IP

    一位朋友用过以下代码片段检索 LAN 中主机的本地 IP 地址 int buffersize 512 char name buffersize if gethostname name buffersize 1 Exception excep
  • 为什么 deref 强制转换不适用于 `From::from`?

    来自section在书里 Deref 强制转换将引用转换为实现Deref特征转换为对另一种类型的引用 它会自动发生 当我们传递对特定类型值的引用作为参数时 与参数类型不匹配的函数或方法 函数或方法定义 我正在尝试找出两者之间的区别bar a
  • Z3 优化超时

    如何为 z3 优化器设置超时 以便在超时时为您提供最知名的解决方案 from z3 import s Optimize Hard Problem print s check print s model 后续问题 你可以将z3设置为随机爬山还
  • NHibernate 删除 DAL?

    使用 NHibernate 或任何其他 ORM 消除了 DAL 的必要性 我说得对吗 或不 我试图思考如何回答这个问题 但答案是否定的 它不会消除 DAL 的必要性 而不是成为该 DAL 的一部分 毫无疑问 您之前所做的就是访问调用 sql
  • Spring @Bean 与 @Lookup 方法

    我已经利用 Lookup 注释实现了一个 Spring bean 该线程很有帮助 如何使用spring Lookup注解 随后我注意到一种奇怪的行为 我不确定是有意为之还是我自己的误解 Spring 将在使用 Service Compone
  • Android 中的图像内存管理

    这是初学者最常问的问题之一 但不幸的是我仍然无法得到任何帮助 在一个活动中 我有一个 viewflipper 我以编程方式将图像视图分配给它 使用 for 循环将大约 100 个图像添加到 viewflipper 可能是由于图像大小或由于图
  • 基于 redshift 中的自表查找更新表

    我有下表 id email mgr email mgr id 1 email1 email2 2 email2 email3 3 email3 email4 我想通过将 mgr email 与电子邮件匹配来填充 id 列中的 mgr id
  • Android OutOfMemoryError 大图像

    对于尺寸较大的图像 不是按分辨率 该方法会抛出 OutOfMemoryError 我有 12 MP 照片 所有照片的大小都不同 1 5MB 2 5MB 3 2MB 4 1MB 等 所有照片的分辨率都是相同的 4000 x 3000 像素 r
  • 当传递给另一个对象时,谁应该对 IDisposable 对象调用 Dispose?

    是否有关于谁应该致电的指导或最佳实践Dispose 当一次性对象被传递到另一个对象的方法或构造函数时 这里有几个例子来说明我的意思 IDisposable 对象被传递到一个方法中 完成后是否应该释放它 public void DoStuff
  • 使用 AWK 打印 XML 元素

    如何使用 AWK 打印 XML 元素的内容 从开始标记到结束标记 例如 考虑以下 XML
  • 追溯性地向方法添加Java注释?

    有没有办法修改 class 文件以便向某些方法添加 Java 注释 基本上我想遍历 jar 文件中每个类文件的方法并注释某些方法 请注意 这不是在使用 jar 文件时的运行时 相反 完成后我想用注释修改类文件 我确实可以访问源代码 所以如果
  • 测试 JButton 时,我的 lambda 表达式有效,但 actionPerformed 无效

    我正在按照以下步骤第一次学习如何使用 Java Swingtutorial在YouTube上 我已经到达涵盖按钮的部分 并且一直按照代码进行操作 但是 在尝试测试按钮时 当我使用actionPerformed方法 我的按钮不会打印出这个词