在 500 毫秒内更改 JButton 颜色

2023-12-26

我的任务是让按钮在按下时每 500 毫秒改变一次颜色,从红色变为黑色。每次按下按钮时都会开始和停止。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Button extends JButton{
    public Button() {
    setBackground(Color.red);
    addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            change ^= true;

            while(change) {
                setBackground(Color.black);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {}
                setBackground(Color.red);
            }
        }
    });
    }
    boolean change = false;
}

这段代码对我不起作用,我希望有人能够提供帮助!


这里最好的想法是使用类javax.swing.Timer。这是我的解决方案,如何改进代码来做到这一点。

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.WindowConstants;

public class Button extends JButton {
    public Button() {
        setBackground(Color.RED);
        setForeground(Color.WHITE);
        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                change ^= true;

                if (change) {
                    timer.restart();
                } else {
                    timer.stop();
                }
            }
        });
    }

    private boolean change = false;

    private Timer timer = new Timer(500, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (Color.BLACK == getBackground()) {
                setBackground(Color.RED);
            } else {
                setBackground(Color.BLACK);
            }
        }
    });

    public static void main(String[] args) {
        Button b = new Button();
        b.setText("Press me");
        JFrame frm = new JFrame("Test button");
        frm.add(b);
        frm.pack();
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 500 毫秒内更改 JButton 颜色 的相关文章

随机推荐

  • 更改属性名称

    我有一个 JavaScript 对象 如下所示 var a Prop1 test Prop2 test2 我将如何改变属性名称 of Prop1 to Prop3 我尝试了以下代码 但它不起作用 for var p in r p prope
  • Kubernetes 服务的 LoadBalancer 和外部 IP 类型有什么区别

    我正在使用 Kubernetes 服务 但我对以下参数有点困惑外部IP服务中 如果存在路由到一个或多个集群节点的外部 IP 则可以在这些外部 IP 上公开 Kubernetes 服务 在服务端口上使用外部 IP 作为目标 IP 进入集群的流
  • 在Ruby中检测上传文件的MIME类型

    是否有一种防弹方法可以在 Ruby 或 Ruby on Rails 中检测上传文件的 MIME 类型 我正在使用 SWFupload 上传 JPEG 和 PNGcontent type总是 application octet stream
  • 如何将图像添加到 PDF 的所有页面?

    我一直在尝试使用 itextsharp 将图像添加到所有页面 图像需要覆盖每个页面的所有内容 我在所有其他代码下面使用了以下代码doc add Document doc new Document iTextSharp text PageSi
  • Android/RoboGuice/Maven:Eclipse 中的 ClassNotFoundException,但不是来自 Maven 命令行

    我有一个处理 Guice 绑定的类 这是需要运行的第一个东西 称为 ApplicationAutoworkout java package com redsoft android autoworkout import java util L
  • 阅读文件的注释

    有些文件的属性中有 摘要 选项卡 此选项卡包括标题 作者 注释等信息 C 有没有办法读取文件的注释 我必须只读取 jpg 等图像文件的注释 评论和其他答案是搜索的好地方 这里有一些完整的代码可以帮助您 确保您参考shell32 dll首先和
  • C# CA2104 - 自动代码分析不喜欢静态只读可变类型

    我有这样的代码 public abstract class Base is going to be used in deriving classes let s assume foo is threadsafe protected stat
  • AWS Step Function 中的 lambda 能否知道 AWS Step Function 的当前执行 ID?

    对于在步骤函数中执行的 lambda 我想知道其中 AWS 状态机的当前执行 id 有没有办法在步骤函数中知道这一点 老问题 但答案已经过时了 你现在可以在步骤函数中得到这个 使用 Execution id 我正在使用的示例 run tas
  • VHDL 类型转换 - 找到 4 种可能的定义

    我正在尝试将两个 std logic 位转换为整数 如下所示 LIBRARY IEEE USE IEEE std logic 1164 ALL USE IEEE numeric std ALL ENTITY TEST IS PORT sw1
  • mongodb写锁发生在什么级别?

    我开始研究一个项目的技术 该项目可能会频繁进行大型写入 我想知道 mongo 写锁发生在什么级别 是在服务器级别还是数据库级别 我读过了http www mongodb org display DOCS How does concurren
  • 使用日期时间筛选器构建 LINQ to Entities 表达式树

    我正在尝试完成 Todd Sprang 提供的动态查询的实现 请参阅此link https www codeproject com Articles 493917 Dynamic Querying with LINQ to Entities
  • 使用 Apache 的 HttpClient 与使用 JDK 的 URLConnection 从小程序内连接到 URL

    在下面的代码中 我已经验证 如果使用 JDK 的 URLConnection 类 则从小程序内连接到 URL 会保留浏览器的会话 但是 如果使用 Apache 的 HttpClient 库 则情况并非如此 有谁知道为什么 或者 有没有办法让
  • GitHub CLI 客户端 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想更多地通过命令行使用 GitHub 而不是通过网络 当然 与Git repos相关的一切都可以通过
  • 无法创建目录 /var/teamsserver

    我已经在我的 mac 上安装了 os x server Mavericks 并且想添加机器人 由于某些原因 我的远程存储库位于其他外部服务器上 我可以通过指定端口上的用户名和密码访问它 我已经将远程存储库添加到 os x 服务器 如下所示
  • 如何将字符串转换为枚举?

    我正在尝试在 PowerShell 中将字符串转换为枚举值 但在任何地方都找不到它 我得到一个 JSON 结果 我只想使用定义为字符串的 Healthstate enum HealthState Invalid 0 Ok 1 Warning
  • 如何在没有用户名和密码的情况下验证移动应用程序?

    我正在构建一个使用 OpenId 来验证用户身份的 Web 应用程序 就像 Stackoverlfow 所做的那样 也会有一个移动应用程序 例如安卓或iPhone 这些应用程序必须以某种方式进行身份验证或登录 才能访问数据并更新属于用户的内
  • iPhone - 在 UIView 上绘制透明矩形以显示下面的视图

    我目前有两个 UIView 一个是红色背景 另一个是蓝色 蓝色视图是红色视图的子视图 我想做的是能够在蓝色视图上 剪切 出矩形 以便红色视图可见 你打算怎样做呢 您必须覆盖顶视图的drawRect方法 因此 例如 您可以创建一个HoleyV
  • 如何使用 JVMTI 代理重新转换没有进一步调用的执行方法?

    我在运行时出于各种目的检测类文件 为此 我使用了 JVMTI 代理 我检测方法的策略是调用RetransformClasses要调用的函数ClassFileLoadHook 此策略适用于在检测后进行任何进一步调用的所有方法 因为实际检测发生
  • 任意维度的 Numpy 切片

    我想对 numpy 数组进行切片以获得i最后一个维度中的第一个索引 对于 3D 数组 这将是 slice myarray i 但我正在编写一个函数 我可以在其中获取任意维度的数组 因此对于 4D 数组 我需要myarray i 等等 有没有
  • 在 500 毫秒内更改 JButton 颜色

    我的任务是让按钮在按下时每 500 毫秒改变一次颜色 从红色变为黑色 每次按下按钮时都会开始和停止 import java awt import java awt event import javax swing public class