Misturador RGB

1 resposta
Fox_McCloud

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.

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"

1 Resposta

Pedrosa

Show de bola!

Criado 5 de abril de 2006
Ultima resposta 5 de abr. de 2006
Respostas 1
Participantes 2