Back to the 2019 paper

Module III: Basics of Web Programming

201914m

Write an Applet application which will display colours in list box and a scrolling banner which scrolls from left to right within a browser. When user selects any color from the list, it changes the color of scrolling banner.

Worked SolutionAI Assisted

Answer: Java Applet Application — Color List Box & Scrolling Banner

1. Problem Requirements Breakdown

  1. Color List Box (java.awt.List): Displays multiple color names (e.g., Red, Green, Blue, Magenta, Orange) allowing user selection.
  2. Scrolling Banner: A text banner that continuously scrolls horizontally from left to right across the Applet screen using a background Thread (Runnable interface).
  3. Dynamic Color Change (ItemListener): When the user selects a color from the list, the banner's text/fill color dynamically updates to the selected color.
+-------------------------------------------------------------+
|  [ Color List Box ]         SCROLLING BANNER TEXT ----->    |
|  | Red        |             (Updates X position in Thread)  |
|  | Green      |                                             |
|  | Blue       |             (Selected color updates text)   |
|  | Magenta    |                                             |
+-------------------------------------------------------------+

2. Complete Java Applet Source Code

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/*
  <applet code="ColorBannerApplet.class" width="650" height="350">
  </applet>
*/
public class ColorBannerApplet extends Applet implements Runnable, ItemListener {
    // GUI List Box for selecting colors
    private List colorList;

    // Scrolling Banner properties
    private String bannerText = "Welcome to Bihar Engineering University - Web Technology Exam Archive";
    private int bannerX = -300; // Starting X coordinate (left)
    private int bannerY = 220;  // Y coordinate
    private Color bannerColor = Color.RED; // Default banner color

    // Animation thread
    private Thread animationThread = null;
    private volatile boolean running = false;

    // Applet Initialization
    @Override
    public void init() {
        setLayout(null); // Absolute positioning layout
        setBackground(new Color(245, 246, 242));

        // 1. Create and populate the Color List Box
        colorList = new List(5, false); // 5 visible rows, single selection
        colorList.add("Red");
        colorList.add("Green");
        colorList.add("Blue");
        colorList.add("Magenta");
        colorList.add("Orange");
        colorList.add("Dark Teal");
        colorList.add("Black");

        // Set position and dimensions of the list box
        colorList.setBounds(30, 60, 140, 110);
        colorList.select(0); // Select 'Red' by default

        // Register ItemListener to capture user selection
        colorList.addItemListener(this);

        // Add component to Applet
        add(colorList);
    }

    // Applet Start: Launch Animation Thread
    @Override
    public void start() {
        if (animationThread == null) {
            running = true;
            animationThread = new Thread(this);
            animationThread.start();
        }
    }

    // Animation Loop: Scrolls Banner from Left to Right
    @Override
    public void run() {
        while (running) {
            // Move banner coordinate to the right
            bannerX += 5;

            // When the banner scrolls off the right edge, wrap back to the left
            if (bannerX > getWidth()) {
                bannerX = -gEstimateTextWidth();
            }

            repaint(); // Request screen redraw

            try {
                Thread.sleep(60); // Control scrolling speed (approx 16 FPS)
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }

    // Rough text width estimation for wrapping
    private int gEstimateTextWidth() {
        return bannerText.length() * 10;
    }

    // Applet Stop: Stop Thread cleanly
    @Override
    public void stop() {
        running = false;
        animationThread = null;
    }

    // Event Handler for List Box Selection
    @Override
    public void itemStateChanged(ItemEvent e) {
        String selected = colorList.getSelectedItem();
        
        if ("Red".equalsIgnoreCase(selected)) {
            bannerColor = new Color(178, 58, 46);
        } else if ("Green".equalsIgnoreCase(selected)) {
            bannerColor = new Color(34, 139, 34);
        } else if ("Blue".equalsIgnoreCase(selected)) {
            bannerColor = new Color(0, 102, 204);
        } else if ("Magenta".equalsIgnoreCase(selected)) {
            bannerColor = new Color(180, 0, 180);
        } else if ("Orange".equalsIgnoreCase(selected)) {
            bannerColor = new Color(230, 120, 0);
        } else if ("Dark Teal".equalsIgnoreCase(selected)) {
            bannerColor = new Color(31, 75, 67);
        } else if ("Black".equalsIgnoreCase(selected)) {
            bannerColor = Color.BLACK;
        }

        repaint(); // Immediately redraw with new color
    }

    // Screen Paint Rendering
    @Override
    public void paint(Graphics g) {
        // UI Labels
        g.setColor(new Color(27, 36, 48));
        g.setFont(new Font("SansSerif", Font.BOLD, 15));
        g.drawString("Select Banner Color:", 30, 45);

        // Banner Track Area Box
        g.setColor(new Color(235, 237, 231));
        g.fillRect(10, 185, getWidth() - 20, 70);
        g.setColor(new Color(219, 223, 215));
        g.drawRect(10, 185, getWidth() - 20, 70);

        // Draw Scrolling Banner
        g.setColor(bannerColor);
        g.setFont(new Font("Serif", Font.BOLD | Font.ITALIC, 20));
        g.drawString(bannerText, bannerX, bannerY);
    }
}

3. HTML Deployment File (banner.html)

<!DOCTYPE html>
<html>
<head>
  <title>Color Banner Applet Demo</title>
</head>
<body>
  <h2>Java Applet: Scrolling Banner with Color Selector</h2>
  <applet code="ColorBannerApplet.class" width="650" height="350">
    Java Applets are not supported in your environment.
  </applet>
</body>
</html>

4. Lifecycle & Flow Explanation

  1. init(): Creates the List component, populates color names, sets absolute bounds (setBounds), and registers addItemListener(this).
  2. start() / run(): Starts the background thread that continuously increments bannerX by 5 pixels and invokes Thread.sleep(60) to produce smooth left-to-right scrolling.
  3. itemStateChanged(): Triggers immediately when a user clicks any color in the list, maps the selection to a java.awt.Color object, and updates bannerColor.
  4. paint(): Renders the background container and draws the text at dynamic position (bannerX, bannerY) with bannerColor.

Similar questions

Budget AppAndroid App

Pocketly on Android

Log daily food, travel, and hostel expenses instantly. Set monthly spending limits and see where your money goes without complex spreadsheets.