Java中颜色计算器的帮助

Java中颜色计算器的帮助,java,colors,hex,Java,Colors,Hex,我想知道如何根据用户输入的十六进制值的颜色绘制背景。我有这个: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class SimpleColorCalc extends JFrame implements Runnable { ColorPanel cp; JButton show; JTextField hexCode; public SimpleColorCalc()

我想知道如何根据用户输入的十六进制值的颜色绘制背景。我有这个:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class SimpleColorCalc extends JFrame implements Runnable 
{
  ColorPanel cp;
  JButton show;
  JTextField hexCode;

  public SimpleColorCalc() 
  { 
    super("Simple Color Calculator"); 
    cp = new ColorPanel(); 
    show = new JButton("Show the Color"); 
    hexCode = new JTextField("ffffff");
    show.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 
        String text = hexCode.getText(); 
        try 
        { 
          int colorCode = Integer.parseInt(text, 16); 
          Color enteredColor = new Color(colorCode); 
          cp.setColor(enteredColor); 
        } 
        catch(NumberFormatException ex) 
        { 
          hexCode.setText("ffffff"); 
          cp.setColor(Color.white); 
        } 
        finally 
        { 
          repaint(); 
        }
      }
    });
  } 
  public static void main(String[] args) 
  {
    SimpleColorCalc scc = new SimpleColorCalc(); 
    javax.swing.SwingUtilities.invokeLater(scc); 
  } 
  public void run() 
  { 
    setSize(400,300); 
    Container c = getContentPane();
    JPanel top = new JPanel(); 
    c.add(BorderLayout.NORTH, top); 
    top.setLayout(new GridLayout(1,2)); 
    top.add(show); 
    top.add(hexCode);
    setVisible(true); 
  }
}

但我想知道如何修复它,以便在用户决定是否在十六进制代码前面加上0x时,它将起作用。我还想知道如何在java中将十六进制代码转换成颜色。我在这方面遇到了问题。

嗯,将十六进制字符串转换为颜色:

Color myColor = Color.decode("0xFF0000");
或者你可以:

Color myColor2 = new Color(0xFF0000);
但是输入不能是字符串,否则会出现NumberFormatException


确定输入是否以0x开头应该很容易

此JUnit测试可以帮助您理解:

@Test
public void test1() {
    Integer hexInt = Integer.parseInt("FF0000", 16);
    Color createdColor = new Color(hexInt);
    assertEquals(Color.RED, createdColor);
}
您可以使用
Integer.parseInt
将十六进制字符串转换为以16为基数的数字。注意:如果字符串无效(包含数字或a-f以外的字符),则会引发异常

然后可以使用
整数创建
Color
实例


我已经包括了一个断言,以表明创建的是我们所期望的。

Woops。。。打错了,我会改正的