jbutton 按钮 圆角 渐变色

2024-04-29 19:36

本文主要是介绍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();}}}

这篇关于jbutton 按钮 圆角 渐变色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL

致远个性化之--发起流程页面,去掉【查看流程】按钮

需求 近期在做的项目中,遇到一个需求,想把发起流程页面中的【查看流程】按钮去掉,只让员工预测流程,知道自己的事项流程走向,不让看全局流程图。包含PC端和移动端,以及微协同端。 如下图效果示例: 实现 此需求,只能通过修改页面代码实现。在此不分析实现过程,现把具体实现方式呈现如下,各位如有需求可参照设置。适用版本V9.0,其他版本未进行测试,估计不会有大的差别! PC端 找到文件

如何在Excel中创建一个VBA宏,并设置一个按钮来执行这个宏

下面是一个详细的步骤指南 步骤1:创建VBA宏 1. 打开Excel并按 `Alt + F11` 打开VBA编辑器。 2. 在VBA编辑器中,选择 `Insert` > `Module` 来插入一个新的模块。 3. 将以下代码粘贴到模块中: ```vba Sub CreateNewSheet()' 声明一个工作表对象Dim newSheet As Worksheet' 添加一个新的工作表S

Vue3实现点击按钮下载头像功能

要实现的效果 点击头像右上角弹出选项,点击保存图片可以把图片下载保存到本地 实现方式关键代码 1.第一种,直接创建a标签给头像地址。进行下载 // 创建一个隐藏的 <a> 标签const link = document.createElement("a");link.href = headPic; // 设置为图片的 URLlink.download = "avatar.jpg"; //

Android ToggleButton 开关按钮

ToggleButton相关属性,方法android:textOn="On"android:textOff="Off"android:checked="true"setChecked(boolean) package shortcut.song.com.myapplication;import android.support.v7.app.AppCompatActivity;impo

Android RadioButton 单选按钮

RadioGroup 单选按钮组, 可以包含多个单选按钮,当单选按钮选中状态改变时会触发setOnCheckedChangeListener package shortcut.song.com.myapplication;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;imp

delphi如何给按钮添加单键快捷键(F1~F12)

用action 讲按钮窗体的Keypreview设为True,然后加如下代码 Delphi/Pascal code ? 1 2 3 4 5 6 procedure  TForm1 . FormKeyDown(Sender: TObject;  var  Key:  Word ;    Shift: TShiftState); begin    i