// Example of a hierarchical layout import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.*; public class Sliders extends JFrame { int [] rgb; // the current colour DrawingPanel drawingPanel; // where we're drawing the oval // The panel into which we draw things class DrawingPanel extends JPanel { DrawingPanel() { setPreferredSize( new Dimension( 400, 200 ) ); } protected void paintComponent( Graphics gContext ) { super.paintComponent( gContext ); gContext.setColor( new Color(rgb[0], rgb[1], rgb[2] ) ); gContext.fillOval( 10, 10, getWidth()-20, getHeight()-20 ); } } // A slider to control one colour component class ColourSlider extends JSlider implements ChangeListener { int index; ColourSlider( int index ) { super( VERTICAL, 0, 255, 200 ); this.index = index; addChangeListener( this ); } public void stateChanged( ChangeEvent e ) { rgb[index] = getValue(); drawingPanel.repaint(); } } // The constructor for this JFrame Sliders() { super(); // A panel for three sliders rgb = new int[3]; rgb[0] = 200; rgb[1] = 200; rgb[2] = 200; JPanel sliderPanel = new JPanel(); ColourSlider rSlider = new ColourSlider( 0 ); ColourSlider gSlider = new ColourSlider( 1 ); ColourSlider bSlider = new ColourSlider( 2 ); rSlider.setValue( rgb[0] ); rSlider.setValue( rgb[1] ); rSlider.setValue( rgb[2] ); sliderPanel.setLayout( new GridLayout(2,3) ); sliderPanel.add( rSlider ); // top row sliderPanel.add( gSlider ); sliderPanel.add( bSlider ); sliderPanel.add( new JLabel( " R " ) ); // bottom row sliderPanel.add( new JLabel( " G " ) ); sliderPanel.add( new JLabel( " B " ) ); // A panel for drawing drawingPanel = new DrawingPanel(); // The JFrame Container cp = getContentPane(); cp.setLayout( new FlowLayout() ); cp.add( drawingPanel ); cp.add( sliderPanel ); pack(); requestFocus(); setVisible(true); } // Test program public static void main( String [] args ) { Sliders hier = new Sliders(); } }