jbutton 按钮 圆角 渐变色

效果图

没按压时背景渐变色
在这里插入图片描述
鼠标按压时背景色改变
在这里插入图片描述

下面是可用的源码

package com.beijin.robot.utils;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class ButtonBuilder {private static JButton DEFAULT_BUTTON = new JButton();public static JButton createRadButtonGradientLowBule(){return createRadCustomColorButton(new Color(0x000000),30,null,new Color(0xFFFFFF),new Color(0xF0F7FF),new Color(172,223,253));}/*** 普通圆角自定义颜色按钮,可设置渐变色* @param fgColor 字体前景色,这里默认给的是 new Color(0xF0F7FF);* @param radius  圆角半径 eg:30* @param bgColor 单一背景色 ,注意:如果空则使用渐变色,如果渐变色也空则使用字体前景色* @param bgColorGradient1 背景渐变色一端 (左)* @param bgColorGradient2 背景渐变色另一端 (右)* @param bgPressColor 按钮被按住时的背景色* @return*/public static JButton createRadCustomColorButton(Color fgColor, int radius, Color bgColor,Color bgColorGradient1,Color bgColorGradient2,Color bgPressColor) {JButton button = new RoundButton(radius, bgColor,bgColorGradient1,bgColorGradient2,bgPressColor);//50button.setForeground(fgColor);return button;}/*** 椭圆按钮*/private static class RoundButton extends JButton {private int radius;private Color bgColor;//单一背景颜色,如果有则不用渐变色private Color bgColorGradient1;// 一端背景渐变色1private Color bgColorGradient2;//另一端背景渐变色2private Color bgPressColor;//鼠标按住时的颜色private boolean isPressed = false;public RoundButton(int radius, Color bgColor,Color bgColorGradient1,Color bgColorGradient2,Color bgPressColor) {super();this.radius = radius;this.bgColor = bgColor;this.bgColorGradient1 = bgColorGradient1;this.bgColorGradient2 = bgColorGradient2;this.bgPressColor = bgPressColor;
//            super.setBackground(color);setBorder(null);// 取消画矩形super.setContentAreaFilled(false);if(bgPressColor == null){bgPressColor = new Color(0xF0F7FF);}//添加鼠标监听点击事件,记录鼠标按压松开状态,颜色改变需要用到addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {isPressed = true;}@Overridepublic void mouseReleased(MouseEvent e) {isPressed = false;}});}@Overrideprotected void paintComponent(Graphics g) {Graphics2D g2 = (Graphics2D) g.create();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);if(bgColor != null){//设置背景色if(isPressed){g2.setColor(bgPressColor);}else{g2.setColor(bgColor);}}else if(bgColorGradient1 != null && bgColorGradient2 != null){if(isPressed){g2.setColor(bgPressColor);}else{//背景色定义渐变色GradientPaint gradient = new GradientPaint(0, 0, bgColorGradient1, super.getSize().width, super.getSize().height, bgColorGradient2, true);// 设置渐变效果g2.setPaint(gradient);}}else{g2.setColor(bgPressColor);}g2.fillRoundRect(0, 0, super.getSize().width - 1, super.getSize().height - 1, radius, radius);super.paintComponent(g2);g2.dispose();}/*** 创建与默认按钮大小相同的 内边距** @param color* @param radius* @return*/public Border createRoundBorder(Color color, int radius) {return new RoundBorder(color, radius);}}/*** 椭圆边框*/private static class RoundBorder implements Border {private Color color;private int radius;public RoundBorder(Color color, int radius) {this.color = color;this.radius = radius;}public Insets getBorderInsets(Component c) {return DEFAULT_BUTTON.getBorder().getBorderInsets(c);};@Overridepublic boolean isBorderOpaque() {return false;}// 实现Border(父类)方法@Overridepublic void paintBorder(Component c, Graphics g, int x, int y, int width,int height) {Graphics2D g2 = (Graphics2D) g.create();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);g2.setColor(color);g2.drawRoundRect(0, 0, c.getWidth() - 1, c.getHeight() - 1, radius, radius);g2.dispose();}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA使用技巧(常用设置、快捷键等)

IDEA使用技巧 一、IDEA常用基本设置设置代码背景颜色/主题/字体Ctrl鼠标滚轮缩放字体大小设置字符编码左右两侧的Project,Structure,Maven等按钮消失新增类似sout,psvm的模版切换某个模块编译的JDK版本 二、常用快捷键CtrlAltT包裹代码Alt回车联想补全Ct…

Kafka(十二)Streams

目录 Streams1 什么式是流式处理2 流式处理的相关概念2.1 拓扑2.2 时间2.2.1 输入时间2.2.2 输出时间 2.3 状态2.4 流和表2.5 时间窗口2.5.1 测试时间窗口 2.6 处理保证 3 流式处理设计模式3.1 单事件处理3.2 使用本地状态3.3 多阶段处理和重分区3.4 使用外部查找:流…

【哈希】Leetcode 两数之和

题目讲解 1. 两数之和 算法讲解 我们希望让这个数组有序,然后再寻找的时候可以很快的找到是否存在这个target - nums[i],这里需要返回的是下标,所以需要一个数据结构保存key:nums AND val:index,因此我们…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦,使得二者可以独立变化。 2、实现思路 使用桥接模式,一定要找到这个类中两个变化的维度:如支…

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查…

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统,恢复出厂开箱状态一模一样 适用型号:隐星P16 23 链接:https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码:ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

惠海原厂直销 H6922 升压恒压IC芯片 2.8-40V升48V60V72V80V100V方案 高效率 低功耗

升压恒压IC芯片是一种在2.8V至40V的宽输入电压范围内工作,并能够将输出电压升高到48V、60V、72V、80V甚至100V的芯片。这种芯片以高效率、低功耗为特点,因此非常适合于对电源效率和功耗有严格要求的应用领域。升压恒压IC芯片的工作原理通常基于电感和电容…

使用FPGA发送一个经过曼彻斯特编码的伪随机序列

介绍 这几天突然就不知道要使用FPGA实现什么样的功能了,然后就跑去学习数电了,学的也是晕晕的。正好之前写了一个使用FPGA发送伪随机序列的代码,然后因为需要使用曼彻斯特编码,所以又加了一个模块吧,使得最后输出的波形经过曼彻斯特编码。 曼彻斯特编码 首先,曼彻斯特编…

前端入门:HTML(css轮廓,填充,宽高)

1.CSS轮廓 注意: outline中,out-style是必须要设置的,格式为: outline-style一共有以下的几个值: 2.CSS填充属性 这是一个用于在一个元素的内容周围产生空间,也就是边框内到白框外之间的距离,…

一款神奇的地理数据可视化python库

在地理信息系统(GIS)和地理数据可视化领域,Python的易用性和强大的库支持使其成为处理地理数据的理想选择之一。今天我们介绍Cartopy库,它为地理数据可视化提供了强大的支持。无论是对于GIS专业人士还是对地理数据可视化感兴趣的初…

Windows环境下nvm的安装与使用

nvm全名node.js version management,顾名思义是一个管理多个nodejs的版本工具。通过它可以安装和切换不同版本的 nodejs,为了解决 node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本。 一、下载 nvm安装包地址: https://gith…

使用yolov8+QT+onnrunxtime进行开发的注意事项

1、本来想尝试做一个C的yolov8在QT5.15.2的应用; 因此,在实现这个目标的时候,我先用了yolov8自带的export进行导出,使用的代码很简单,如下所示: import os from ultralytics import YOLO# model YOLO(&q…

网络安全之防范钓鱼邮件

随着互联网的快速发展,新的网络攻击形式“网络钓鱼”呈现逐年上升的趋势,利用网络钓鱼进行欺骗的行为越来越猖獗,对互联网的安全威胁越来越大。网络钓鱼最常见的欺骗方式就是向目标群体发送钓鱼邮件,而邮件标题和内容,…

基于残差神经网络的汉字识别系统+pyqt前段界面设计

研究内容: 中文汉字识别是一项具有挑战性的任务,涉及到对中文字符的准确分类。在这个项目中,目标是构建一个能够准确识别中文汉字的系统。这个任务涉及到数据集的收集、预处理、模型训练和评估等步骤。尝试了使用残差神经网络(ResNet&#x…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法:我们找到一个字符串的全排列,然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列,所以我们知道两个字符串对应的字符出现的个数相同,那么…

ubuntu24.04 正式放弃VNC

1、ubuntu22.04支持情况 去年9月在22.04中测试发现由于gnome启用Wayland桌面,然而Wayland和vnc兼容不佳,就已经黑屏等问题,当时是vnc和ms-rd(微软远程桌面)两个菜单。 Ubuntu22.04 vnc远程黑屏_ubuntu 远程桌面vnc黑屏-CSDN博客文章浏览阅读…

机器学习在医疗行业的应用:颠覆传统诊疗模式,开启智慧医疗新时代

文章目录 一、精准诊断的突破二、药物研发的革新三、患者管理的智能化四、智能辅助决策系统五、机器学习在医疗行业的前景 随着科技的飞速发展,机器学习作为人工智能的核心技术,正逐渐渗透到各个行业中,其中在医疗行业的应用尤为引人瞩目。机…

纯js对比excel小工具

如何使用JavaScript和xlsx.js实现Excel文件对比:实战指南 在日常办公或数据分析工作中,我们经常需要比较两个Excel文件中的数据差异。手动对比不仅耗时费力,还容易出错。本文将带你通过一个简单的网页应用,利用JavaScript和开源库…

Dockerfile 镜像创建扩展

一、构建SSH镜像 创建dockerfile步骤&#xff1a; 1. 建立工作目录 mkdir /opt/sshd cd /opt/sshd/2.编辑Dockerfile vim Dockerfile #第一行必须指明基于的基础镜像 FROM centos:7 #作者信息 MAINTAINER this is ssh image <wwk> #镜像的操作指令 RUN yum -y update R…

如何禁用WordPress的自动更新(包括主题、插件和核心文件)

这几天发现我的一个网站突然打不开了&#xff0c;提示“此站点遇到了致命错误”,如图&#xff1a; 这个网站一直都是正常运行的&#xff0c;最近也没有过什么更新&#xff0c;按理说不应该会出现问题&#xff0c;我担心可能是主机方面做了什么调整导致&#xff0c;所以联系了Ho…