最近在学java,学完基础不知道做点什么好,心血来潮想写个小工具,某天突然发现十六进制转RGB很麻烦,网上一搜工具不是很多,大多都是在线转换,要是某天没网了怎么办呢??我想可能太简单了吧,大家都不愿意做,那么我就自己写一个吧。
第一次写博客,不足之处请大家多批评(如果有人看到的话<img alt="偷笑"
1.基本思路
十六进制的颜色代码一般的形式为#xxxxxx,#后边为十六进制数,每两位分别对应RGB的一种颜色信息,前两位为R,中间两位为G,后两位为B。我们只要分别把他们提取出来,因为每两位只能从00~ff,对应到十进制为0-255,这样就得到了RGB颜色,用三个文本框显示即可。反过来我们将RGB分别转换为十六进制数,再将十六进制数转换为字符串,拼接起来之后显示在十六进制代码框。
2.界面
首先肯定需要一个十六进制代码的文本框,且默认字符串为“#”,同样的有三个RGB框,也是文本框,用来显示和输入。然后需要两个按钮,一个实现十六转RGB,一个实现RGB转十六,具体事件实现方法在下边。剩下的有几个label,用来提示的,我做出来的界面大概是下边这个图
比如点击向下转,就是上边的数转换到下边。向上转一样。具体的界面中字体,颜色设置在代码中
3.点击事件
点击向下转换的时候,我先用一个字符串取得jtf1(十六进制代码文本框,下同),调用String的substring方法,将字符串分解为三个子字符串,因为本来有一个#(在最前),所以比如说要取红色的信息,取得的子字符串就应该是substring(1,3),第一位开始,第三位结束,其余类似。然后将子字符串转换为整数,一般的方法是Integer.parseInt(string str),其实这个方法还有一个参数,就是你可以指定这个数的进制数,即完整形式为parseInt(String s, int radix),我们在这里指定为16,就可以将它输出位十进制。最后一步,因为输出的十进制数是整型,所以只需将其转换为string类型,然后调用文本框的setText(string s)方法即可。向上转换原理类似,先将RGB文本框中的字符串转换为十六进制数,再将十六进制数转为字符串,可以的到三个这样的字符串,最后我们将他们拼接起来用jtf1显示就行了,关键就是怎么将一个数转换为十六进制,网上方法很多,我这里的思路是这样的,比如我们在R文本框中输入255,然后字符串转整型,然后用Integer.toHexString(int i)方法,可直接将一个十进制数转换为十六进制的字符串。
4.代码实现

文末有下载方式


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class ColorTrans {public static void main(String[] args) {// TODO 自动生成的方法存根new transFrame();}
}
class transFrame extends JFrame{/*** @author jackee* @data 2016-9-25* */private static final long serialVersionUID = 1L;JTextField jtf1,jtfr,jtfg,jtfb;JButton jb1 = new JButton("向下转换");JButton jb2 = new JButton("向上转换");JPanel jPanel = new JPanel();JPanel jPanel2 = new JPanel();JPanel jPanel3  = new JPanel();JPanel jPanel4 = new JPanel();JLabel jlab1,jlabr,jlabg,jlabb;String str = new String("#");public transFrame(){init();/*** 设置输入框的光标在末尾* */jtf1.addFocusListener(new FocusListener() {@Overridepublic void focusLost(FocusEvent e) {// TODO 自动生成的方法存根}@Overridepublic void focusGained(FocusEvent e) {// TODO 自动生成的方法存根jtf1.setCaretPosition(jtf1.getText().length());}});//点击向下转换,十六进制转RGBjb1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根str = jtf1.getText();if(!(str.length() ==7)){JDialog dialog = new JDialog(new transFrame(),"注意") ;dialog.setSize(300, 200);dialog.add(new Label("格式不正确!必须为六位十六进制数"));dialog.setVisible(true);;}else{String str2 = str.substring(1,3);String str3 = str.substring(3,5);String str4 = str.substring(5,7);int red = Integer.parseInt(str2,16);int green = Integer.parseInt(str3,16);int blue = Integer.parseInt(str4,16);jtfr.setText(String.valueOf(red));jtfg.setText(String.valueOf(green));jtfb.setText(String.valueOf(blue));jPanel4.setBackground(new Color(red, green, blue));}}});//点击向上转换,RGB转十六进制jb2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根int red = Integer.parseInt(jtfr.getText());int green = Integer.parseInt(jtfg.getText());int blue= Integer.parseInt(jtfb.getText());if((0<=red&&red<=255)&&(0<=green&&green<=255)&&(0<=blue&&blue<=255)){String str1 = new String("#");str1 = str1 +Integer.toHexString(red)+Integer.toHexString(green)+Integer.toHexString(blue);jtf1.setText(str1);jPanel4.setBackground(new Color(red, green, blue));}else{JDialog dialog = new JDialog(new transFrame(), "注意");dialog.setSize(300, 200);dialog.add(new JLabel("RGB只能为0-255之间的整数"));dialog.setVisible(true);}}});}//界面的初始化方法public void init(){this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jb1.setBackground(Color.ORANGE);jb1.setFont(new Font(null, Font.BOLD, 20));jb2.setBackground(Color.PINK);jb2.setFont(new Font(null, Font.BOLD, 20));jlab1 = new JLabel("请输入十六进制代码:");jlab1.setFont(new Font(null, Font.BOLD, 20));jlabr = new JLabel("R:");jlabr.setFont(new Font(null, Font.BOLD, 20));jlabr.setForeground(Color.red);jlabg = new JLabel("G:");jlabg.setFont(new Font(null, Font.BOLD, 20));jlabg.setForeground(Color.green);jlabb = new JLabel("B:");jlabb.setFont(new Font(null, Font.BOLD, 20));jlabb.setForeground(Color.blue);jtf1 = new JTextField(8);jtf1.setFont(new Font( null, Font.BOLD, 20));jtf1.setAlignmentX(2);jtfr = new JTextField(5);jtfr.setForeground(Color.red);jtfr.setFont(new Font( null, Font.BOLD, 20));jtfg = new JTextField(5);jtfg.setForeground(Color.green);jtfg.setFont(new Font( null, Font.BOLD, 20));jtfb = new JTextField(5);jtfb.setForeground(Color.blue);jtfb.setFont(new Font( null, Font.BOLD, 20));jPanel2.add(jlab1);jPanel2.add(jtf1);jPanel4.setLayout(new BorderLayout());jPanel4.add(jb1,BorderLayout.NORTH);jPanel4.add(jb2,BorderLayout.SOUTH);jPanel3.add(jlabr);jPanel3.add(jtfr);jPanel3.add(jlabg);jPanel3.add(jtfg);jPanel3.add(jlabb);jPanel3.add(jtfb);this.setBounds(0, 0, 400, 300);this.setTitle("颜色转换器");this.setResizable(false);jtf1.setText(str);this.setLayout(new BorderLayout());this.add(jPanel2, BorderLayout.NORTH);this.add(jPanel4 );this.add(jPanel3,BorderLayout.SOUTH);this.setVisible(true);}
}
</span>

基本的添加及设置组件的方法就不用我说了吧,如果你发现代码有什么错误,或者需要改进的地方,欢迎联系我,一起交流学习

用java实现十六进制代码与RGB互转的颜色转换器相关推荐

  1. Unity3D通过代码修改RGB值来控制UI与物体的Color颜色

    在实际应用过程中,经常有需要将某一物体颜色修改成特定颜色的情况,此时Color中自带的颜色就不够用了,此时我们就需要通过用代码修改RGB值来控制颜色. 常见的错误写法 下面以修改TextMeshPro ...

  2. Java获得时间 String与Timestamp互转

    一.String与Date(java.util.Date)互转      1.1 String -> Date Java代码   String dateStr = "2010/05/0 ...

  3. Java pcm文件与wav文件互转

    Java pcm文件与wav文件互转 2018年05月15日 14:32:28 -过期罐头 阅读数:1432 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn. ...

  4. java 图片 rgb_简单的java图片处理——如何用Java读出一张图片的RGB值?

    如何用Java读出一张图片的RGB值? (牛人可以从第六步开始看,牛人看了代码就知道怎么建文件夹啦!! ) (1) 在刚刚建立项目的根目录新建一个文件夹date,例如,我的这个项目的根目录是:E:\W ...

  5. java字符集转换 Big5 和 Unicode互转

    完整的代码如下 帮助 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  6. 十六进制字符串与中文互转

    十六进制字符串与中文互转 前言:有时候在做数据分析的时候会遇到一些二进制数据文件或者在进行tcp/udp通信的时候经常需要把数据转化成字节数据,其中包含了中文数据,但网上查找半天不知道怎么去解析这些数 ...

  7. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

  8. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  9. java 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

最新文章

  1. SAMBA服务器应用
  2. SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?
  3. Redis - 事务操作与详解
  4. ftp 工具_ftp,ftp工具多大
  5. 《R语言实战》第2章
  6. 疯狂ios讲义疯狂连载之日期选择器(UIDatePicker)
  7. 【深度学习】深度学习之LSTM
  8. 组织商品详情页的数据模型
  9. pandas 学习(二)—— pandas 下的常用函数
  10. Spring Boot 实际应用(三)发送邮件实现
  11. mysql error trace_防止DedeCMS错误警告日志data/mysql_error_trace.inc暴露后台管
  12. python第一个项目:爬取一个网站的所有图片
  13. 经典同步问题一——生产者和消费者问题
  14. 标准C语言程序设计第七版pdf,C语言程序设计课程标准.PDF
  15. 扶贫计算机考试试题,计算机基础知识试题1.doc
  16. QCon上海2015精彩回顾和总结
  17. .net web 应用程序C#
  18. https://github.com/qiangqiang666/demo
  19. PIC16F887 单片机 信号发生器 波形发生器 PCF8591
  20. “QQ尾巴病毒”核心技术的实现(转)

热门文章

  1. 万用表怎么测电池内阻_如何用万用表测量电池内阻?
  2. MobTech出席人工智能创想论坛,分享AI+大数据在营销反欺诈场景下的应用
  3. 200817 python + BI
  4. 反走崛起之路3:缘起之东部——波士顿
  5. 南澳科学会议对潮汕地区的发展能有什么好处?
  6. IntelliJ IDEA 2022.2 正式发布:已完全支持 Spring 6 和 Spring Boot 3!
  7. fopennbsp;,nbsp;freadnbsp;fwr…
  8. 1174 -- 正三角形的外接圆面积
  9. [Golang梦工厂]一个小项目带你学会GIN框架、JWT鉴权、swagger生成接口文档,看这一篇就够了
  10. 瑞萨单片机之定时器中断实现数码管动态扫描(四)