package gui.elements; import java.awt.*; import java.text.*; import javax.swing.*; import javax.swing.event.*; /** *

Title: Java Media for Experiencing Sensation and Perception

*

Description: Gives values to set colors using the RGB * of the monitor primaries

*

Copyright: Copyright (c) 2002

*

Company: Hanover College

* @author John H. Krantz, Ph.D. * @version 0.1 */ public class RGBControl extends JPanel { static final long serialVersionUID = 0; // the sliders public JSlider red = new JSlider(JSlider.HORIZONTAL,0,255,255); public JSlider green = new JSlider(JSlider.HORIZONTAL,0,255,255); public JSlider blue = new JSlider(JSlider.HORIZONTAL,0,255,255); // labels to show the output of the slider private JLabel redLabel = new JLabel("1.00"); private JLabel greenLabel = new JLabel("1.00"); private JLabel blueLabel = new JLabel("1.00"); // panels private JPanel redPanel = new JPanel(); private JPanel greenPanel = new JPanel(); private JPanel bluePanel = new JPanel(); // numeric format private DecimalFormat n3 = new DecimalFormat("0.00"); // raleighmatches private boolean raleigh = false; // constructors public RGBControl() { setup(); } public RGBControl(boolean raly){ raleigh = raly; setup(); } public void setup() { this.setLayout(new GridLayout(3,1)); red.setBackground(Color.red); green.setBackground(Color.green); blue.setBackground(Color.blue); // setBackground(Color.black); redPanel.add(red,BorderLayout.CENTER); redPanel.add(redLabel,BorderLayout.EAST); greenPanel.add(green,BorderLayout.CENTER); greenPanel.add(greenLabel,BorderLayout.EAST); bluePanel.add(blue,BorderLayout.CENTER); bluePanel.add(blueLabel,BorderLayout.EAST); add(redPanel); add(greenPanel); if (! raleigh) add(bluePanel); redLabel.setVisible(false); greenLabel.setVisible(false); blueLabel.setVisible(false); setupListeners(); } private void setupListeners(){ red.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ redLabel.setText(n3.format((double)red.getValue()/ 255.0)); } }); green.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ greenLabel.setText(n3.format((double)green.getValue()/ 255.0)); } }); blue.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ blueLabel.setText(n3.format((double)blue.getValue()/ 255.0)); } }); } // set methods public void setRed(int r) { int temp = (r >= 0 & r <= 255 ? r : red.getValue()); red.setValue(temp); redLabel.setText(n3.format((double)red.getValue()/ 255.0)); } public void setGreen(int g) { int temp = (g >= 0 & g <= 255 ? g : green.getValue()); green.setValue(temp); greenLabel.setText(n3.format((double)green.getValue()/ 255.0)); } public void setBlue(int b) { int temp = (b >= 0 & b <= 255 ? b : blue.getValue()); if (!raleigh) blue.setValue(temp); else blue.setValue(0); blueLabel.setText(n3.format((double)blue.getValue()/ 255.0)); } public void setRed(double r) { double temp = (r >= 0 & r <= 1.0 ? r : 0.0); red.setValue((int)(temp*255.0)); redLabel.setText(n3.format((double)red.getValue()/ 255.0)); } public void setGreen(double g) { double temp = (g >= 0 & g <= 1.0 ? g : 0.0); green.setValue((int)(temp*255.0)); greenLabel.setText(n3.format((double)green.getValue()/ 255.0)); } public void setBlue(double b) { double temp = (b >= 0 & b <= 1.0 ? b : 0.0); if (!raleigh) blue.setValue((int)(temp*255.0)); else blue.setValue(0); blueLabel.setText(n3.format((double)blue.getValue()/ 255.0)); } public void setColor(Color c){ setRed(c.getRed()); setGreen(c.getGreen()); setBlue(c.getBlue()); } public void setRaleigh(boolean b){ raleigh = b; if (raleigh){ remove(blue); blue.setValue(0); } else add(blue); updateUI(); } public void setShowLabels(boolean b){ redLabel.setVisible(b); greenLabel.setVisible(b); blueLabel.setVisible(b); } // get methods public int getRed() { return red.getValue(); } public int getGreen() { return green.getValue(); } public int getBlue() { return blue.getValue(); } public double getRedDbl() { return (double)red.getValue()/255.0; } public double getGreenDbl(){ return (double)green.getValue()/255.0; } public double getBlueDbl(){ return (double)blue.getValue()/255.0; } public Color getColor() { return new Color( red.getValue(), green.getValue(), blue.getValue()); } }