Changing borders on the fly

Here is a short program that creates four labels. Each label draws a bevel border around itself when the mouse pointer enters the component’s region and erases it when the mouse leaves the region. This kind of “rollover” effect has become a popular feature in some applications’ toolbars. Modifying the program to use soft bevel borders would be trivial.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class BevelExample extends JPanel {

	BevelBorder bevel;
	EmptyBorder empty;
	JLabel label[] = new JLabel[4];

	public BevelExample() {
		super(true);
		setLayout(new GridLayout(1, 4));

		bevel = new BevelBorder(BevelBorder.RAISED);
		empty = new EmptyBorder(5, 5, 5, 5);

		label[0] = new JLabel("Home");
		label[1] = new JLabel("Back");
		label[2] = new JLabel("Forward");
		label[3] = new JLabel("Stop");

		for (int i = 0; i < label.length; i++) {
			label[i].setHorizontalAlignment(JLabel.CENTER);
			label[i].addMouseListener(new RolloverListener());
			label[i].setBorder(empty);
			add(label[i]);
		}
	}

	public static void main(String s[]) {
		JFrame frame = new JFrame("Bevel Border");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 100);
		frame.setContentPane(new BevelExample());
		frame.setVisible(true);
	}

	// Inner class to respond to mouse events for the "rollover" effect
	class RolloverListener extends MouseAdapter {
		public void mouseEntered(MouseEvent e) {
			((JLabel) e.getComponent()).setBorder(bevel);
			repaint();
		}

		public void mouseExited(MouseEvent e) {
			((JLabel) e.getComponent()).setBorder(empty);
			repaint();
		}

		public void mouseClicked(MouseEvent e) {
			String text = ((JLabel) e.getComponent()).getText();
			System.out.println("You clicked " + text + "!");
		}
	}
}