2010-10-01 99 views
0

我想知道如何根据用户输入的十六进制值的颜色来绘制背景。我有这样的:Java中的颜色计算器帮助

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中的颜色。我遇到了麻烦。

+0

计算器淋浴? – Seth 2010-10-01 21:00:10

+0

Woops ...输入错误,我会解决这个问题 – Salazar 2010-10-01 21:02:56

回答

1

这JUnit测试可以帮助你理解:

@Test 
public void test1() { 
    Integer hexInt = Integer.parseInt("FF0000", 16); 
    Color createdColor = new Color(hexInt); 
    assertEquals(Color.RED, createdColor); 
} 

您可以使用Integer.parseInt打开十六进制字符串转换为基数16 。注意如果字符串无效(包含数字或af以外的字符),将会抛出异常。

Color实例可以使用Integer创建。

我已经加入了一个断言来表明创建的是我们所期望的。

0

好了,一个十六进制的字符串转换成颜色:

Color myColor = Color.decode("0xFF0000"); 

或者你可以这样做:

Color myColor2 = new Color(0xFF0000); 

但输入不能是一个字符串,否则你会得到一个NumberFormatException。

搞清楚,如果输入与0X开始应该很容易