/* UIDemo.java * * A program to illustrate some basic UI components (controls). * * Bruce M. Bolden * April 5, 1998 * http://www.cs.uidaho.edu/~bruceb/ */ import java.awt.*; import java.awt.event.*; import corejava.*; public class UIDemo extends CloseableFrame implements ActionListener { static DrawingCanvas drawingArea; static TextArea textArea; // A text window public static void main(String[] args) { Frame f = new UIDemo("UI Demo"); f.setSize(350, 300); f.show(); } public void paint( Graphics g ) { drawingArea.doUpdate(); } public void actionPerformed( ActionEvent e ) { /* Dummy method */ /* if( e.getActionCommand().equals( "red" ) ) drawingArea.showColor( "red" ); else if( e.getActionCommand().equals( "green" ) ) drawingArea.showColor( "green" ); else if( e.getActionCommand().equals( "blue" ) ) drawingArea.showColor( "blue" ); */ } public UIDemo(String title) { setLayout( new BorderLayout() ); // Control/Display regions Panel panelCheck = new Panel(); Panel panelChoice = new Panel(); Panel panelDraw = new Panel(); // use grid layout to place things correctly panelChoice.setLayout( new GridLayout(8,1) ); // Drawing/Information display drawingArea = new DrawingCanvas(); textArea = new TextArea( 6, 35 ); panelDraw.add( drawingArea ); panelDraw.add( textArea ); // Color check boxes (display circles) Label circleInfoLabel = new Label( "Show:" ); final int N_COLORS = 3; Checkbox colorCheckbox[] = new Checkbox[N_COLORS]; colorCheckbox[0] = new Checkbox( "red" ); colorCheckbox[1] = new Checkbox( "green" ); colorCheckbox[2] = new Checkbox( "blue" ); // create event handler ItemListener colorCheckBoxListener = new ItemListener() { public void itemStateChanged( ItemEvent e ) { String theColor = ((Checkbox)e.getItemSelectable()).getLabel() ; // set color and force redraw drawingArea.showColor( theColor ); drawingArea.doUpdate(); textArea.append( "colorChoice: " + theColor + "\n" ); } }; // add components and event handler to panel panelCheck.add( circleInfoLabel ); for( int i = 0 ; i < N_COLORS ; i++ ) { colorCheckbox[i].addItemListener( colorCheckBoxListener ); panelCheck.add( colorCheckbox[i] ); } // Create a menu for background choices Label bgInfoLabel = new Label( "Background:" ); Choice choice = new Choice(); choice.addItem( "white" ); choice.addItem( "red" ); choice.addItem( "green" ); choice.addItem( "blue" ); panelChoice.add( bgInfoLabel ); panelChoice.add( choice ); // create event handler ItemListener colorChoiceListener = new ItemListener() { public void itemStateChanged( ItemEvent e ) { // set color and force redraw //drawingArea.showColor( (String)e.getItem() ); drawingArea.setBackgroundColor( (String)e.getItem() ); drawingArea.doUpdate(); textArea.append( "Background color: " + e.getItem() + "\n" ); } }; choice.addItemListener( colorChoiceListener ); // add panels to the frame add( panelCheck, "South" ); add( panelChoice, "East" ); add( panelDraw, "Center" ); } } class DrawingCanvas extends Canvas { final int dcWidth = 250; final int dcHeight = 120; boolean showRed = false; boolean showGreen = false; boolean showBlue = false; Color bgColor = Color.white; // background color DrawingCanvas() { setSize( dcWidth, dcHeight ); } /** force update by calling repaint(). */ public void doUpdate() { repaint(); } /** display selected circles */ public void paint( Graphics g ) { setBackground( bgColor ); if( showRed ) { g.setColor( Color.red ); g.fillOval( 25, 20, 50, 50 ); } if( showGreen ) { g.setColor( Color.green ); g.fillOval( 100, 20, 50, 50 ); } if( showBlue ) { g.setColor( Color.blue ); g.fillOval( 175, 20, 50, 50 ); } } /** set circles to be displayed */ public void showColor( String s ) { if( s.equals( "red" ) ) showRed = showRed ? false : true; else if( s.equals( "green" ) ) showGreen = showGreen ? false : true; else if( s.equals( "blue" ) ) showBlue = showBlue ? false : true; } /** set canvas background */ public void setBackgroundColor( String s ) { if( s.equals( "red" ) ) bgColor = Color.red; else if( s.equals( "green" ) ) bgColor = Color.green; else if( s.equals( "blue" ) ) bgColor = Color.blue; else bgColor = Color.white; } }