EventDemo import java.awt.*; import java.awt.event.*; import java.applet.*; public class EventDemo extends Applet implements ActionListener, ItemListener, AdjustmentListener { // An applet that displays a shape and some text. Color of // shape and text is controlled by a vertical scroll bar. // Color of background is controlled by a horizontal scroll bar. // Text to be displayed can be entered in a TextField. // Shape to be displayed can be selected from a Choice componnet. // Bright or dim colors can be selected using a Chackbox. // The display area is implemented as a ColorCanvas; the // ColorCanvas class is defined later in this file. ColorCanvas display; // display area Choice shapeChoice; // for selecting which shape to display Checkbox brightColors;// for selecting bright or dim colors TextField text; // for entering the text to be displayed Scrollbar hScroll; // horizontal scroll bar Scrollbar vScroll; // vertical scroll bar public void init() { // set up contents of applet setBackground(Color.red); // background for applet Panel displayPanel = new Panel(); // to hold display and scroll bars displayPanel.setLayout(new BorderLayout()); display = new ColorCanvas("Hello World",ColorCanvas.RECT); displayPanel.add(display, BorderLayout.CENTER); hScroll = new Scrollbar(Scrollbar.HORIZONTAL,50,1,0,100); displayPanel.add(hScroll, BorderLayout.SOUTH); vScroll = new Scrollbar(Scrollbar.VERTICAL,0,1,0,100); displayPanel.add(vScroll, BorderLayout.EAST); Panel topPanel = new Panel(); // for controls topPanel.setBackground(Color.white); topPanel.setLayout(new GridLayout(1,3,5,5)); shapeChoice = new Choice(); shapeChoice.add("Rectangle"); shapeChoice.add("Oval"); shapeChoice.add("RoundRect"); topPanel.add(shapeChoice); brightColors = new Checkbox("Bright Colors"); topPanel.add(brightColors); text = new TextField("Hello World"); topPanel.add(text); setLayout(new BorderLayout(1,1)); // applies to applet itself add("Center", displayPanel); add("North", topPanel); setDisplayColors(); // defined below text.addActionListener(this); // set this applet to listen for events hScroll.addAdjustmentListener(this); vScroll.addAdjustmentListener(this); shapeChoice.addItemListener(this); brightColors.addItemListener(this); } // end of init() public Insets getInsets() { // leave border around edge of applet return new Insets(1,1,1,1); } void setDisplayColors() { // Set foreground and background colors of display, // depending on values of scroll bars and // on state of the checkbox. (Colors are made // using Color.getHSBColor(float,float,float), // which creates a color given a hue, a satuation, // and a brightness. The parameters must be between // 0.0 and 1.0.) float backgroundBrightness = hScroll.getValue() / 100.0F; float foregroundHue = vScroll.getValue() / 100.0F; float saturation = 1.0F; float brightness; if (brightColors.getState()) brightness = 1.0F; else brightness = 0.6F; Color backgroundColor = Color.getHSBColor(0.0F,0.0F,backgroundBrightness); // A grayscale color Color foregroundColor = Color.getHSBColor(foregroundHue,1.0F,brightness); display.setBackground(backgroundColor); display.setForeground(foregroundColor); } // end of setDisplayColors() public void itemStateChanged(ItemEvent evt) { // from the ItemListener interface // An item event could have been generated by shapeChoice or brightColors. Object source = evt.getSource(); // object that generated the event if (source == shapeChoice) { // user has selected a shape; set the shape // that is shown in the display switch (shapeChoice.getSelectedIndex()) { case 0: display.setShape(ColorCanvas.RECT); break; case 1: display.setShape(ColorCanvas.OVAL); break; case 2: display.setShape(ColorCanvas.ROUNDED); break; } } else if (source == brightColors) { // user has changed the state of the checkbox; // reset the colors for the display, // and ask the system to redraw the display setDisplayColors(); display.repaint(); } } // end itemStateChanged() public void actionPerformed(ActionEvent evt) { // from the ActionListener interface // This can only be generated by the TextField, because the user has pressed // return. Set the display text to the contents of the TextField, text. display.setText(text.getText()); } // end of actionPerformed() public void adjustmentValueChanged(AdjustmentEvent evt) { // User has changed the value of one of the scroll bars. // In thisprogram, it doesn't matter which one. Respond // by setting the display colors. setDisplayColors(); display.repaint(); } // end of adjustmentValueChanged() } // end of class Event Demo class ColorCanvas extends Canvas { // Display a shape and some text. // The canvas's setForeground() and setBackground() // methods should be called to set the colors to // be used for drawing. private String text; // text to be displayed private int shape; // code for shape to be displayed; private Font font; // used for displaying the text public final static int RECT = 0; // shape code for a rectangle public final static int OVAL = 1; // shape code for an oval public final static int ROUNDED = 2; // shape code for an round rect public ColorCanvas(String text, int shape) { this.text = text; this.shape = shape; font = new Font("Serif",Font.PLAIN,18); } public void setText(String text) { this.text = text; repaint(); } public void setShape(int shape) { this.shape = shape; repaint(); } public void paint(Graphics g) { int width = getSize().width; // get size of canvas int height = getSize().height; int shape_left = width / 9; // compute position and size of shape int shape_top = height / 3; int shape_width = (7*width / 9); int shape_height = (5*height / 9); switch (shape) { // draw the shape case RECT: g.fillRect(shape_left,shape_top,shape_width,shape_height); break; case OVAL: g.fillOval(shape_left,shape_top,shape_width,shape_height); break; case ROUNDED: g.fillRoundRect(shape_left,shape_top,shape_width,shape_height,24,24); break; } g.setFont(font); g.drawString(text,width/9,2*height/9); // draw the text } } // end of class ColorCanvas