Misturador RGB

Segue um programinha que eu fiz com três JSlider onde pode-se misturar as cores R (red), G (green) e B (blue) obtendo-se o resultado visual, os valores inteiros e os valores hexadecimais de cada cor.

Pode-se usar os valores hexadecimais em qualquer sistema que utilize cores em formato hexadecimal (html e css, por exemplo).

Esse programinha ainda pode ser incorporado a um programão como janelinha para que o usuário escolha uma mistura de cores na preferência dele (como o Photoshop faz, por ex, mas mais simples).

Abaixo o código e em anexo um .jar auto-executável que contém as classes e o arquivo .java com o código-fonte.

A parte visual foi desenvolvida com o plugin visual do Eclipse em null Layout.

Há um método interessante para converter ints até 255 para hexadecimal sem usar recursos prontos. Pode-se extender a lógica para valores maiores.

[code]import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.JTextField;
import javax.swing.JLabel;

public class Janela extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JSlider redSlider = null;
private JSlider greenSlider = null;
private JSlider blueSlider = null;
private JPanel painel = null;
private Color color;
private final char[] hexa = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
private JTextField hexaValues = null;
private JTextField intValues = null;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private JLabel jLabel2 = null;
private JLabel jLabel3 = null;
private JLabel jLabel4 = null;
/**
 * This method initializes redSlider	
 * 	
 * @return javax.swing.JSlider	
 */
private JSlider getRedSlider() {
	if (redSlider == null) {
		redSlider = new JSlider();
		redSlider.setOrientation(javax.swing.JSlider.VERTICAL);
		redSlider.setForeground(new java.awt.Color(163,184,204));
		redSlider.setMaximum(255);
		redSlider.setValue(0);
		redSlider.setBounds(new java.awt.Rectangle(16,16,16,200));
	}
	return redSlider;
}

/**
 * This method initializes jSlider	
 * 	
 * @return javax.swing.JSlider	
 */
private JSlider getJSlider() {
	if (greenSlider == null) {
		greenSlider = new JSlider();
		greenSlider.setOrientation(javax.swing.JSlider.VERTICAL);
		greenSlider.setMaximum(255);
		greenSlider.setValue(0);
		greenSlider.setBounds(new java.awt.Rectangle(48,16,16,200));
	}
	return greenSlider;
}

/**
 * This method initializes jSlider	
 * 	
 * @return javax.swing.JSlider	
 */
private JSlider getJSlider2() {
	if (blueSlider == null) {
		blueSlider = new JSlider();
		blueSlider.setOrientation(javax.swing.JSlider.VERTICAL);
		blueSlider.setMaximum(255);
		blueSlider.setValue(0);
		blueSlider.setBounds(new java.awt.Rectangle(80,16,16,200));
	}
	return blueSlider;
}

/**
 * This method initializes painel	
 * 	
 * @return javax.swing.JPanel	
 */
private JPanel getPainel() {
	if (painel == null) {
		painel = new JPanel();
		painel.setPreferredSize(new java.awt.Dimension(10,10));
		painel.setBackground(java.awt.Color.black);
		painel.setBounds(new java.awt.Rectangle(128,16,100,100));
		painel.setIgnoreRepaint(true);
	}
	return painel;
}

/**
 * This method initializes hexaValues	
 * 	
 * @return javax.swing.JTextField	
 */
private JTextField getHexaValues() {
	if (hexaValues == null) {
		hexaValues = new JTextField();
		hexaValues.setBounds(new java.awt.Rectangle(128,188,100,20));
		hexaValues.setEditable(false);
		hexaValues.setText("00,00,00");
	}
	return hexaValues;
}

/**
 * This method initializes intValues	
 * 	
 * @return javax.swing.JTextField	
 */
private JTextField getIntValues() {
	if (intValues == null) {
		intValues = new JTextField();
		intValues.setBounds(new java.awt.Rectangle(128,142,100,20));
		intValues.setEditable(false);
		intValues.setText("0,0,0");
	}
	return intValues;
}

/**
 * @param args
 */
public static void main(String[] args) {
	new Janela().setVisible(true);
}

private void update(){
	color = new Color(redSlider.getValue(),greenSlider.getValue(),blueSlider.getValue());
	intValues.setText(redSlider.getValue()+","+greenSlider.getValue()+","+blueSlider.getValue());
	hexaValues.setText(intToHexa(redSlider.getValue())+","+intToHexa(greenSlider.getValue())+","+intToHexa(blueSlider.getValue()));
}

private String intToHexa(int color){
	if(color>255)return "FF";
	char char1 = hexa[(int)(color/16)];
	char char2 = hexa[color%16];
	return String.valueOf(char1)+String.valueOf(char2);
}

private void paint(){
	Graphics g = painel.getGraphics();
	g.setColor(color);
	g.fillRect(0,0,100,100);
	g.dispose();
}

private void addListeners(){
	ChangeListener listener = new ChangeListener(){
		public void stateChanged(ChangeEvent e) {
			update();
			paint();
		}
	};
	redSlider.addChangeListener(listener);
	greenSlider.addChangeListener(listener);
	blueSlider.addChangeListener(listener);
}

/**
 * This is the default constructor
 */
public Janela() {
	super();
	initialize();
	addListeners();
}

/**
 * This method initializes this
 * 
 * @return void
 */
private void initialize() {
	this.setSize(255, 295);
	this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
	this.setResizable(false);
	this.setPreferredSize(new java.awt.Dimension(0,0));
	this.setContentPane(getJContentPane());
	this.setTitle("Cores RGB");
}

/**
 * This method initializes jContentPane
 * 
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
	if (jContentPane == null) {
		jLabel4 = new JLabel();
		jLabel4.setBounds(new java.awt.Rectangle(80,232,16,16));
		jLabel4.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
		jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel4.setText("B");
		jLabel3 = new JLabel();
		jLabel3.setBounds(new java.awt.Rectangle(48,232,16,16));
		jLabel3.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
		jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel3.setText("G");
		jLabel2 = new JLabel();
		jLabel2.setBounds(new java.awt.Rectangle(16,232,16,16));
		jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);
		jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel2.setText("R");
		jLabel1 = new JLabel();
		jLabel1.setBounds(new java.awt.Rectangle(128,167,100,16));
		jLabel1.setText("RGB - hexa");
		jLabel = new JLabel();
		jLabel.setBounds(new java.awt.Rectangle(128,121,100,16));
		jLabel.setText("RGB - inteiros");
		jContentPane = new JPanel();
		jContentPane.setLayout(null);
		jContentPane.add(getJSlider(), null);
		jContentPane.add(getJSlider2(), null);
		jContentPane.add(getPainel(), null);
		jContentPane.add(getRedSlider(), null);
		jContentPane.add(getHexaValues(), null);
		jContentPane.add(getIntValues(), null);
		jContentPane.add(jLabel, null);
		jContentPane.add(jLabel1, null);
		jContentPane.add(jLabel2, null);
		jContentPane.add(jLabel3, null);
		jContentPane.add(jLabel4, null);
	}
	return jContentPane;
}

} // @jve:decl-index=0:visual-constraint="10,10"[/code]

Show de bola!