import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class SwingColorTest extends JFrame 
{
JPanel swatch;
SwingColorControls RGBControls,HSBControls;

public SwingColorTest()
{
super("ColorTest");
setSize(400,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel pane = new JPanel();
  pane.setLayout(new GridLayout(1,3,5,15));
  swatch= new JPanel();
  String[]label1 = {"Red","Green","Blue"};
  String[]label2 = {"Hue","Saturation","Brightness"};
  RGBControls= new SwingColorControls(this,label1);
  HSBControls= new SwingColorControls(this,label2);
  swatch.setBackground(Color.black);
  pane.add(swatch);
  pane.add(RGBControls);
  pane.add(HSBControls);
  pack();
  setContentPane(pane);
  setVisible(true);
}
public static void main(String[] args)
{
SwingColorTest sct= new SwingColorTest();

}

public void update(SwingColorControls control)
{
 Color c;
 int [] value =new int[3];
 for(int i=0;i<3;i++)
 {
  value[i]=Integer.parseInt(control.sittingTextField[i].getText());
}
if (control==RGBControls)
{
c= new Color(value[0],value[1],value[2]);
float[] hsbValues =new float[3];
float[] HSB =Color.RGBtoHSB(value[0],value[1],value[2],hsbValues);
HSB[0]*=360;
HSB[1]*=100;
HSB[2]*=100;
  for (int i=0; i<3;i++)
  {
   HSBControls.sittingTextField[i].setText(String.valueOf((int)HSB[i]));
  }
 }
else
{
c= Color.getHSBColor((float)value[0]/360,(float)value[1]/100,(float)value[2]/100);
RGBControls.sittingTextField[0].setText(String.valueOf(c.getRed()));
RGBControls.sittingTextField[1].setText(String.valueOf(c.getGreen()));
  RGBControls.sittingTextField[2].setText(String.valueOf(c.getBlue()));
}
swatch.setBackground(c);
swatch.repaint();
}
}
  
  class SwingColorControls extends JPanel implements ActionListener,FocusListener
{
   SwingColorTest sct ;
   JLabel[] sittingLabel = new JLabel[3];
 JTextField[] sittingTextField = new JTextField[3];

 public void SwingColorControls(SwingColorTest parent,String[]Label)
 {
  sct = parent;
 
  setLayout(new GridLayout(3,2,5,0));
  for(int i=0;i<3;i++)
  {
  sittingLabel[i]= new JLabel(Label[i],SwingConstants.LEFT);
  sittingTextField[i]= new JTextField("0");
  sittingTextField[i].addActionListener(this);
  sittingTextField[i].addFocusListener(this);
  add(sittingLabel[i]);
  add(sittingTextField[i]);  
  }
 
  show();
 } public void actionPerformed(ActionEvent ae)
{
if (ae.getSource() instanceof JTextField)
 sct.update(this);
}
public void focusGained(FocusEvent fe)
{
sct.update(this);
}
public void focusLost(FocusEvent fe)
{
}
}