首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java Swing JButton在悬停时颜色变化缓慢(&L)

Java Swing是Java语言的一个图形用户界面(GUI)工具包,用于创建桌面应用程序。JButton是Swing库中的一个组件,用于创建按钮。

当需要在悬停时改变JButton的颜色并实现缓慢变化时,可以使用Java的动画效果库来实现。以下是一个示例代码:

代码语言:txt
复制
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class HoverButtonExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hover Button Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        JButton button = new JButton("Hover Me");
        button.setBackground(Color.BLUE);
        button.setForeground(Color.WHITE);

        button.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                animateColorChange(button, Color.RED);
            }

            @Override
            public void mouseExited(MouseEvent e) {
                animateColorChange(button, Color.BLUE);
            }
        });

        frame.getContentPane().add(button);
        frame.setVisible(true);
    }

    private static void animateColorChange(JButton button, Color targetColor) {
        Color initialColor = button.getBackground();
        float[] initialHSB = Color.RGBtoHSB(initialColor.getRed(), initialColor.getGreen(), initialColor.getBlue(), null);
        float[] targetHSB = Color.RGBtoHSB(targetColor.getRed(), targetColor.getGreen(), targetColor.getBlue(), null);

        Timer timer = new Timer(10, null);
        timer.addActionListener(e -> {
            float[] currentHSB = new float[3];
            for (int i = 0; i < 3; i++) {
                currentHSB[i] = initialHSB[i] + (targetHSB[i] - initialHSB[i]) * (float) timer.getDelay() / 1000;
            }
            button.setBackground(Color.getHSBColor(currentHSB[0], currentHSB[1], currentHSB[2]));
            button.repaint();

            if (Arrays.equals(currentHSB, targetHSB)) {
                timer.stop();
            }
        });

        timer.start();
    }
}

这段代码创建了一个带有"Hover Me"文本的按钮,并在悬停时将按钮的背景颜色从蓝色缓慢变化为红色,鼠标离开时又缓慢变回蓝色。

推荐的腾讯云相关产品:腾讯云服务器(CVM)和腾讯云容器服务(TKE)。腾讯云服务器提供了可靠的云计算基础设施,可用于部署和运行Java Swing应用程序。腾讯云容器服务是一种高度可扩展的容器管理服务,可用于部署和管理Java Swing应用程序的容器化版本。

腾讯云服务器产品介绍链接:https://cloud.tencent.com/product/cvm 腾讯云容器服务产品介绍链接:https://cloud.tencent.com/product/tke

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在Swing组件中使用HTML

许多Swing组件在其GUI中显示文本字符串。默认情况下,组件的文本以一种字体和颜色显示,并且全部显示一行上。...示例:HtmlDemo 名为HtmlDemo的应用程序允许您通过标签上设置文本来使用HTML格式播放。您可以HtmlDemo.java中找到此程序的完整代码。这是HtmlDemo示例的图片。...ButtonHtmlDemo将字体,颜色和其他文本格式添加到三个按钮。您可以ButtonHtmlDemo.java中找到此程序的完整代码。这是ButtonHtmlDemo示例的图片。...import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.ImageIcon...还请注意,当禁用按钮,不幸的是,其HTML文本将保持黑色,而不是变为灰色。 (请参阅错误#4783068,以查看这种情况是否发生了变化。) 本节讨论了如何在普通的非文本组件中使用HTML。

2.4K20

Java-GUI编程之Swing组件

javax.swing.*; import javax.swing.border.*; import java.awt.*; public class BorderTest { JFrame...,最终肯定是需要点击来完成一些操作,所以JToolBar以及JMenu都提供了更加便捷的添加子组件的方法add(Action a),在这个方法的内部会做如下几件事: 创建一个适用于该容器的组件(例如,工具栏中创建一个工具按钮...返回值: 返回用户选中的颜色 */ 案例: ​ 使用颜色选择器,完成下图功能: ​ 点击按钮,改变文本域的背景色 演示代码: import javax.swing.*; import...new JFrame("测试颜色选择器"); JTextArea jta = new JTextArea("快关注我",6,30); JButton button = new JButton...四种对话框演示 消息对话框: import cn.itcast.swing.util.ImagePathUtil; import javax.swing.*; import java.awt.*;

2.2K20

Java applet详解

每当用户从其他页面返回到包含Applet的页面,则调用该方法。 停止start():当用户从包含applet的页面移除的时候,该方法自动被调用。因此,可以相同的applet中反复调用该方法。...对于JApplet的第一种添加构件形式 import javax.swing.JApplet; import javax.swing.JButton; public class Test2 extends...(每个JApplet都有一个默认的面板) 对于JApplet的第二种添加构件的形式 import javax.swing.JApplet; import javax.swing.JButton; import...使用paint()和print帮助理解applet的生命周期 import java.awt.Graphics; import javax.swing.JApplet; import javax.swing.JButton...System.out.println("init"+a); Thread thread = new Thread(this);//这里的this是指当前对象,其实就是指运行的applet了,启动

1.2K20

王者荣耀角度下分析面向对象程序设计B中23种设计模式之生成器模式

一、简述 王者荣耀这款游戏中,玩家可以根据自己的喜好来调整页面布局,比如有的玩家觉得左侧出装顺手,而有的玩家则觉得右侧出装顺手;再比如说玩家局内想要通过展开地图向队友发送信号,有些玩家觉得地图左侧展开操作顺畅...很显然,在编写代码无法构造方法中进行硬编码来满足所有玩家对组件组合(布局)的要求,而是将布局结果对象的构造过程分成若干个步骤,即根据当前组件个数,一个接口中定义若干个方法,每个方法负责创建布局结果对象的一个组件...如果产品之间的差异很大,则不适合使用建造者模式,因此其适用范围受到一定的限制; ②如果产品的内部变化复杂,可能会导致需要定义更多具体建造者类来实现这种变化,导致系统变得很庞大。...生成器模式的适用情景: ①当系统准备为用户提供一个内部结构复杂的对象,而且构造方法中编写创建该对象的代码无法满足用户需求,就可以使用生成器模式来构造这样的对象; ②当某些系统要求对象的构造过程必须独立于创建该对象的类...package angle_builderPattern; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel

77010

王者荣耀角度下分析面向对象程序设计B中23种设计模式之生成器模式

· 生成器模式王者荣耀中的应用 · 一、简述 王者荣耀这款游戏中,玩家可以根据自己的喜好来调整页面布局,比如有的玩家觉得左侧出装顺手,而有的玩家则觉得右侧出装顺手;再比如说玩家局内想要通过展开地图向队友发送信号...很显然,在编写代码无法构造方法中进行硬编码来满足所有玩家对组件组合(布局)的要求,而是将布局结果对象的构造过程分成若干个步骤,即根据当前组件个数,一个接口中定义若干个方法,每个方法负责创建布局结果对象的一个组件...如果产品之间的差异很大,则不适合使用建造者模式,因此其适用范围受到一定的限制; ②如果产品的内部变化复杂,可能会导致需要定义更多具体建造者类来实现这种变化,导致系统变得很庞大。...生成器模式的适用情景: ①当系统准备为用户提供一个内部结构复杂的对象,而且构造方法中编写创建该对象的代码无法满足用户需求,就可以使用生成器模式来构造这样的对象; ②当某些系统要求对象的构造过程必须独立于创建该对象的类...package angle_builderPattern; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel

58300
领券