首页
学习
活动
专区
工具
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

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

相关·内容

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

    在王者荣耀这款游戏中,玩家可以根据自己的喜好来调整页面布局,比如有的玩家觉得左侧出装顺手,而有的玩家则觉得右侧出装顺手;再比如说玩家在局内想要通过展开地图向队友发送信号时,有些玩家觉得地图左侧展开操作顺畅,而另外一些玩家觉得右侧展开操作顺畅。这些组件的页面布局亦可通过自定义来完成。所有的这些功能,达到了王者荣耀设计者让玩家能更好地体验游戏的初衷。 在本实例中,包含有地图左侧展开右侧出装、地图右侧展开左侧出装、地图/出装同左/右侧等多种组件,玩家对于不同组件的组合(布局)有着不同的要求。很显然,在编写代码时无法在构造方法中进行硬编码来满足所有玩家对组件组合(布局)的要求,而是将布局结果对象的构造过程分成若干个步骤,即根据当前组件个数,在一个接口中定义若干个方法,每个方法负责创建布局结果对象的一个组件,而实现该接口的类将负责创建布局结果对象,也就是说,将布局结果对象的创建过程封装在另一个类中(像这种封装一个对象的创建过程的类称作生成器),从而实现满足所有玩家对于出装、地图展开不同布局需求的目的。

    00

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

    在王者荣耀这款游戏中,玩家可以根据自己的喜好来调整页面布局,比如有的玩家觉得左侧出装顺手,而有的玩家则觉得右侧出装顺手;再比如说玩家在局内想要通过展开地图向队友发送信号时,有些玩家觉得地图左侧展开操作顺畅,而另外一些玩家觉得右侧展开操作顺畅。这些组件的页面布局亦可通过自定义来完成。所有的这些功能,达到了王者荣耀设计者让玩家能更好地体验游戏的初衷。 在本实例中,包含有地图左侧展开右侧出装、地图右侧展开左侧出装、地图/出装同左/右侧等多种组件,玩家对于不同组件的组合(布局)有着不同的要求。很显然,在编写代码时无法在构造方法中进行硬编码来满足所有玩家对组件组合(布局)的要求,而是将布局结果对象的构造过程分成若干个步骤,即根据当前组件个数,在一个接口中定义若干个方法,每个方法负责创建布局结果对象的一个组件,而实现该接口的类将负责创建布局结果对象,也就是说,将布局结果对象的创建过程封装在另一个类中(像这种封装一个对象的创建过程的类称作生成器),从而实现满足所有玩家对于出装、地图展开不同布局需求的目的。

    01
    领券