Java: Example - ColorDisplay
/**
* Shows color set by RGB scrollbars.
* @version One of my first Java programs (1995?), last update 2002-04-21.
* @author Fred Swartz
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
////////////////////////////////////////////////////////////////// ColorDisplay
class ColorDisplay extends JFrame {
JSlider redBar; // Slider for adjusting red from 0-255
JSlider grnBar;
JSlider bluBar;
int red = 128; // initial red color value
int green = 128;
int blue = 128;
GraphicsPanel palette; // an area to display the color
JTextField txtField; // shows the Java source equivalent
//================================================ constructor
public ColorDisplay() {
palette = new GraphicsPanel();
// Create a textfield for displaying the values
txtField = new JTextField();
txtField.setFont(new Font("Monospaced", Font.PLAIN, 12));
txtField.setText("Color(" + red + ", " + green + ", " + blue +
") or " + "Color(0x" +
Integer.toHexString(blue + 256 * (green + 256 * red)) + ")");
txtField.setEditable(false);
// Create one object that will listen to all sliders
ChangeListener al = new ColorListener();
redBar = new JSlider(JSlider.VERTICAL, 0, 255, red);
redBar.addChangeListener(al);
redBar.setBackground(Color.red);
grnBar = new JSlider(JSlider.VERTICAL, 0, 255, green);
grnBar.addChangeListener(al);
grnBar.setBackground(Color.green);
bluBar = new JSlider(JSlider.VERTICAL, 0, 255, blue);
bluBar.addChangeListener(al);
bluBar.setBackground(Color.blue);
//=== Put the color palette and textfield in a box
Box paletteText = Box.createVerticalBox();
paletteText.add(palette);
paletteText.add(txtField);
//=== put the 3 sliders in a gridlayout panel
JPanel colorControls = new JPanel();
colorControls.setLayout(new GridLayout(1, 3));
colorControls.add(redBar);
colorControls.add(grnBar);
colorControls.add(bluBar);
//=== Now let's build the content pane
Container content = this.getContentPane();
content.setLayout(new BoxLayout(content, BoxLayout.X_AXIS));
content.add(paletteText);
content.add(colorControls);
this.setTitle("ColorDisplay");
this.pack();
}//end constructor
////////////////////////////////////////////////////////////// GraphicsPanel
// A component for drawing ,overrides paintComponent()
class GraphicsPanel extends JPanel {
//======================================== GraphicsPanel constructor
public GraphicsPanel() {
this.setPreferredSize(new Dimension(300, 300));
this.setBackground(Color.white);
this.setForeground(Color.black);
}//end constructor
//=================================== GraphicsPanel : paintComponent
public void paintComponent(Graphics g) {
super.paintComponent(g); // paint background, border
g.setColor(new Color(red, green, blue)); // Set the color
g.fillRect(0, 0, this.getWidth(), this.getHeight()); // Color everything
}//endmethod paintComponent
}//endclass GraphicsPanel
///////////////////////////////////////////////////// class ColorListener
// This class is created only as a place to put the listener.
// We could have just as easily put the listener in any other class,
// or used an anonymous listener.
// This is defined as an inner class (defined inside of ColorDisplay),
// so it can reference the field variables of that class (specifically,
// the sliders, graphics panel, and text field).
class ColorListener implements ChangeListener {
public void stateChanged(ChangeEvent ae) {
red = redBar.getValue();
green = grnBar.getValue();
blue = bluBar.getValue();
txtField.setText("Color(" + red + ", " + green + ", " + blue +
") or " + "Color(0x" + Integer.toHexString(blue +
256 * (green + 256 * red)) + ")");
palette.repaint();
}//endmethod stateChanged
}//endclass ColorListener
//================================================================= main
public static void main(String[] args) {
JFrame window = new ColorDisplay();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}//end main
}//end class ColorDisplay