InternalFrameListenerDemo.java Source code

Java tutorial

Introduction

Here is the source code for InternalFrameListenerDemo.java

Source

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 < m_infos.length; 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));
    }
}