Помогите с калькулятором цвета в Java - PullRequest
0 голосов
/ 02 октября 2010

Я хочу знать, как рисовать фон на основе цвета шестнадцатеричного значения, введенного пользователем. У меня есть это:

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. У меня проблемы с этим.

Ответы [ 2 ]

1 голос
/ 02 октября 2010

Этот тест 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 голосов
/ 02 октября 2010

Ну, преобразовав шестнадцатеричную строку в цвет:

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

Или вы можете сделать:

Color myColor2 = new Color(0xFF0000);

Но тогда входные данные не могут быть строкой, иначевы получите NumberFormatException.

Выяснить, должен ли ввод начинаться с 0x, просто:

...