Swing JFC Java

import java.beans.PropertyVetoException;
import javax.swing.plaf.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class InternalFrameListenerDemo 
extends JFrame
implements ActionListener, InternalFrameListener
{
  protected int m_count;
  protected int m_tencount;
  private int[] m_counts = new int[7];
  private int m_open, m_closing, m_close, m_iconify, 
    m_deiconify, m_activate, m_deactivate;
  protected JButton m_newFrame;
  protected JDesktopPane m_desktop;
  protected JComboBox m_UIBox;
  protected UIManager.LookAndFeelInfo[] m_infos;
  private JLabel m_lOpened, m_lClosing, m_lClosed, 
    m_lIconified, m_lDeiconified, m_lActivated, 
    m_lDeactivated;
  protected IFEventCanvas m_ifEventCanvas;
  protected Timer m_eventTimer;
    
  public InternalFrameListenerDemo() {
    setTitle("Animated InternalFrameListener");
    m_count = m_tencount = 0;
    JPanel innerListenerPanel = new JPanel(new GridLayout(7,1));
    JPanel listenerPanel = new JPanel(new BorderLayout());
    m_ifEventCanvas = new IFEventCanvas();
        
    m_lOpened = new JLabel("internalFrameOpened");
    m_lClosing = new JLabel("internalFrameClosing");
    m_lClosed = new JLabel("internalFrameClosed");
    m_lIconified = new JLabel("internalFrameIconified");
    m_lDeiconified = new JLabel("internalFrameDeiconified");
    m_lActivated = new JLabel("internalFrameActivated");
    m_lDeactivated = new JLabel("internalFrameDeactivated");
    innerListenerPanel.add(m_lOpened);
    innerListenerPanel.add(m_lClosing);
    innerListenerPanel.add(m_lClosed);
    innerListenerPanel.add(m_lIconified);
    innerListenerPanel.add(m_lDeiconified);
    innerListenerPanel.add(m_lActivated);
    innerListenerPanel.add(m_lDeactivated);
    listenerPanel.add("Center", m_ifEventCanvas);
    listenerPanel.add("West", innerListenerPanel);
    listenerPanel.setOpaque(true);
    listenerPanel.setBackground(Color.white);
    m_desktop = new JDesktopPane();
    m_desktop.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
    m_newFrame = new JButton("New Frame");
    m_newFrame.addActionListener(this);
    m_infos = UIManager.getInstalledLookAndFeels();
    String[] LAFNames = new String[m_infos.length];
    for(int i=0; i      LAFNames[i] = m_infos[i].getName();
    }
    m_UIBox = new JComboBox(LAFNames);
    m_UIBox.addActionListener(this);
    JPanel topPanel = new JPanel(true);
    topPanel.setLayout(new FlowLayout());
    topPanel.setBorder(new CompoundBorder(
      new SoftBevelBorder(BevelBorder.LOWERED),
      new CompoundBorder(new EmptyBorder(2,2,2,2),
        new SoftBevelBorder(BevelBorder.RAISED))));
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add("North", topPanel);
    getContentPane().add("Center", m_desktop);
    getContentPane().add("South", listenerPanel);
    ((JPanel) getContentPane()).setBorder(new CompoundBorder(
      new SoftBevelBorder(BevelBorder.LOWERED),
      new CompoundBorder(new EmptyBorder(1,1,1,1),
        new SoftBevelBorder(BevelBorder.RAISED))));
    topPanel.add(m_newFrame);
    topPanel.add(new JLabel("Look & Feel:",SwingConstants.RIGHT));
    topPanel.add(m_UIBox);
    setSize(645,500);
    Dimension dim = getToolkit().getScreenSize();
    setLocation(dim.width/2-getWidth()/2,
      dim.height/2-getHeight()/2);
    setVisible(true);
    WindowListener l = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };       
    addWindowListener(l);
    m_eventTimer = new Timer(1000, this);
    m_eventTimer.setRepeats(true);
    m_eventTimer.start();
  }
  public void newFrame() {
    JInternalFrame jif = new JInternalFrame("Frame " + m_count, 
      true, true, true, true);
    jif.addInternalFrameListener(this);
    jif.setBounds(20*(m_count%10) + m_tencount*80, 
      20*(m_count%10), 200, 200);
    JLabel label = new JLabel();
    label.setBackground(Color.white);
    label.setOpaque(true);
    jif.getContentPane().add(label);
    m_desktop.add(jif);
    try {            
      jif.setSelected(true);        
    }
    catch (PropertyVetoException pve) {
      System.out.println("Could not select " + jif.getTitle());
    }
    m_count++;
    if (m_count%10 == 0) {
      if (m_tencount < 3)
        m_tencount++;
      else 
        m_tencount = 0;
    }
  }
  public void clearCounts() {
    for (int i=0; i<7; i++) {
      m_counts[i] = 0;
    }
  }
  public int[] getCounts() {
    return m_counts;
  }
  public void internalFrameOpened(InternalFrameEvent e) {
    m_counts[0]++;    
  }
  public void internalFrameClosing(InternalFrameEvent e) {
    m_counts[1]++;    
  }
  public void internalFrameClosed(InternalFrameEvent e) {
    m_counts[2]++;    
  }
  public void internalFrameIconified(InternalFrameEvent e) {
    m_counts[3]++;    
  }
  public void internalFrameDeiconified(InternalFrameEvent e) {
    m_counts[4]++;    
  }
  public void internalFrameActivated(InternalFrameEvent e) {
    m_counts[5]++;
  }
  public void internalFrameDeactivated(InternalFrameEvent e) {
    m_counts[6]++;    
  }
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == m_newFrame)
      newFrame();
    else if (e.getSource() == m_eventTimer) {
      m_ifEventCanvas.render(getCounts());
      clearCounts();
    }
    else if (e.getSource() == m_UIBox) {
      try {
        m_UIBox.hidePopup(); //BUG WORKAROUND
        UIManager.setLookAndFeel(m_infos[m_UIBox.getSelectedIndex()].getClassName());
        SwingUtilities.updateComponentTreeUI(this);
      }
      catch(Exception ex) {
        System.out.println("Could not load " + 
          m_infos[m_UIBox.getSelectedIndex()].getClassName());
      }
    }
  }
 
  public static void main(String[] args) {
    new InternalFrameListenerDemo();
  }
}
class IFEventCanvas
extends JComponent
{
  private Color[] m_colors = new Color[8];
  private int[][] m_arrays = new int[15][12];
  public IFEventCanvas() {
    setPreferredSize(new Dimension(505,130));
    for (int i=0; i<7; i++) {
      m_arrays[i] = new int[12];
      m_colors[i] = new Color(37+i*14, 37+i*14, 37+i*14);
    }
  }
  public void paintEventSquare(Graphics g, int value, int currwidth, 
   int currheight, int cellwidth, int cellheight, Color color) {
    if(value != 0) {
      g.setColor(color);
      g.fillRect(currwidth, currheight, cellwidth, cellheight);
      g.setColor(Color.green);
      g.drawString("" + value, currwidth + 5, currheight + 14);
    }
    g.setColor(Color.black);
    g.drawRect(currwidth, currheight, cellwidth, cellheight);
  }
  public void paintComponent(Graphics g) {
    int cellheight = 19;
    int cellwidth = 40;
    int currwidth = 0;
    int currheight = 0;
    for (int i=0; i < 12; i++) {
      for (int j=0; j < 7; j++) {
        paintEventSquare(g, m_arrays[j][i], currwidth, currheight,
          cellwidth, cellheight, m_colors[j]);
        currheight += cellheight;
      }
      currheight = 0;
      currwidth += cellwidth;
    }
  }
  public void render(int[] counts) {
    for (int i=0; i < 11; i++) {
      for (int j=0; j < 7; j++) {            
        m_arrays[j][i] = m_arrays[j][i+1];
      }
    }
    for (int k=0; k < 7; k++) {
      m_arrays[k][11] = counts[k];
    }
    paintImmediately(new Rectangle(0,0,505,130));
  }
}