⽤java实现⼗六进制代码与RGB互转的颜⾊转换器
最近在学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,然后字符串转整型,然后⽤
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;
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() {
@Override
public void focusLost(FocusEvent e) {
// TODO ⾃动⽣成的⽅法存根
}
@Override
public void focusGained(FocusEvent e) {
万能在线进制转换器转换器网
// TODO ⾃动⽣成的⽅法存根
jtf1.Text().length());
}
});
//点击向下转换,⼗六进制转RGB
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO ⾃动⽣成的⽅法存根
str = Text();
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() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO ⾃动⽣成的⽅法存根
int red = Integer.Text());
int green = Integer.Text());
int blue= Integer.Text());
int blue= Integer.Text());
if((0<=red&&red<=255)&&(0<=green&&green<=255)&&(0<=blue&&blue<=255)){
String str1 = new String("#");
str1 = str1 +HexString(red)+HexString(green)+HexString(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.d);
jlabg = new JLabel("G:");
jlabg.setFont(new Font(null, Font.BOLD, 20));
jlabg.);
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.d);
jtfr.setFont(new Font( null, Font.BOLD, 20));
jtfg = new JTextField(5);
jtfg.);
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);
this.setVisible(true);
}
}
</span>
基本的添加及设置组件的⽅法就不⽤我说了吧,如果你发现代码有什么错误,或者需要改进的地⽅,欢迎联系我,⼀起交流学习

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。