[an error occurred while processing this directive]

Icon Changes at runtime

                         

This section illustrates you how to create an icon that changes from at runtime.

To create an icon, we have defined Icon class which provides three methods getIconWidth(),  getIconHeight() and paintIcon(). We have defined two sliders using JSlider class to show the changes related to height and width of the icon.

The method g.fillOval(p, q, getIconWidth(), getIconHeight()) draws the oval shape. The method stateChanged() is invoked when the state is changed by the listener. To layout a container to arrange and resize its components and define five regions: north, south, east, west, and center, the class BorderLayout is used. The slider showing width is directed to the north by BorderLayout.NORTH and the slider showing height is directed to the south by BorderLayout.SOUTH. The icon is directed to the center BorderLayout.CENTER.

Here is the code of IconChangesForm.java

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

public class IconChangesForm {
  public static void main(String[] args) {
     final JSlider w = new JSlider(JSlider.HORIZONTAL, 115070);
     final JSlider h = new JSlider(JSlider.HORIZONTAL, 115070);
    class FormIcon implements Icon {
     public int getIconWidth() {
     return w.getValue();
      }
     public int getIconHeight() {
     return h.getValue();
      }
    public void paintIcon(Component component, Graphics g, int p, int q)
         {
        g.fillOval(p, q, getIconWidth(), getIconHeight());
     }
    }
    Icon icon = new FormIcon();
    final JLabel label = new JLabel(icon);
    class Form implements ChangeListener {
      public void stateChanged(ChangeEvent event) {
        label.repaint();
      }
    }
    Form form = new Form();
    w.addChangeListener(form);
    h.addChangeListener(form);
    JFrame frame = new JFrame("Form Icon");
    Container container = frame.getContentPane();
    container.setLayout(new BorderLayout());
    container.add(w, BorderLayout.NORTH);
    container.add(h, BorderLayout.SOUTH);
    container.add(label, BorderLayout.CENTER);
    frame.setSize(200200);
    frame.show();
  }
  }

Output will be displayed as:

Download Source Code

                         

[an error occurred while processing this directive]