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]