DesktopManagerDemo.java Source code

Java tutorial

Introduction

Here is the source code for DesktopManagerDemo.java

Source

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

public class DesktopManagerDemo extends JFrame implements ActionListener {
    protected int m_count;
    protected int m_tencount;
    protected JButton m_newFrame;
    protected JDesktopPane m_desktop;
    protected JComboBox m_UIBox;
    protected UIManager.LookAndFeelInfo[] m_infos;
    protected JLabel m_lActivates, m_lBegindrags, m_lBeginresizes, m_lCloses, m_lDeactivates, m_lDeiconifies,
            m_lDrags, m_lEnddrags, m_lEndresizes, m_lIconifies, m_lMaximizes, m_lMinimizes, m_lOpens, m_lResizes,
            m_lSetbounds;
    protected MyDesktopManager m_myDesktopManager;
    protected DMEventCanvas m_dmEventCanvas;
    protected Timer m_eventTimer;

    public DesktopManagerDemo() {
        setTitle("Animated DesktopManager");
        m_count = m_tencount = 0;

        JPanel innerListenerPanel = new JPanel(new GridLayout(15, 1));
        JPanel listenerPanel = new JPanel(new BorderLayout());
        m_dmEventCanvas = new DMEventCanvas();

        m_lActivates = new JLabel("activateFrame");
        m_lBegindrags = new JLabel("beginDraggingFrame");
        m_lBeginresizes = new JLabel("beginResizingFrame");
        m_lCloses = new JLabel("closeFrame");
        m_lDeactivates = new JLabel("deactivateFrame");
        m_lDeiconifies = new JLabel("deiconifyFrame");
        m_lDrags = new JLabel("dragFrame");
        m_lEnddrags = new JLabel("endDraggingFrame");
        m_lEndresizes = new JLabel("endResizingFrame");
        m_lIconifies = new JLabel("iconifyFrame");
        m_lMaximizes = new JLabel("maximizeFrame");
        m_lMinimizes = new JLabel("minimizeFrame");
        m_lOpens = new JLabel("openFrame");
        m_lResizes = new JLabel("resizeFrame");
        m_lSetbounds = new JLabel("setBoundsForFrame");

        innerListenerPanel.add(m_lActivates);
        innerListenerPanel.add(m_lBegindrags);
        innerListenerPanel.add(m_lBeginresizes);
        innerListenerPanel.add(m_lCloses);
        innerListenerPanel.add(m_lDeactivates);
        innerListenerPanel.add(m_lDeiconifies);
        innerListenerPanel.add(m_lDrags);
        innerListenerPanel.add(m_lEnddrags);
        innerListenerPanel.add(m_lEndresizes);
        innerListenerPanel.add(m_lIconifies);
        innerListenerPanel.add(m_lMaximizes);
        innerListenerPanel.add(m_lMinimizes);
        innerListenerPanel.add(m_lOpens);
        innerListenerPanel.add(m_lResizes);
        innerListenerPanel.add(m_lSetbounds);

        listenerPanel.add("Center", m_dmEventCanvas);
        listenerPanel.add("West", innerListenerPanel);
        listenerPanel.setOpaque(true);
        listenerPanel.setBackground(Color.white);

        m_myDesktopManager = new MyDesktopManager();
        m_desktop = new JDesktopPane();
        m_desktop.setDesktopManager(m_myDesktopManager);
        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, 600);
        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.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 actionPerformed(ActionEvent e) {
        if (e.getSource() == m_newFrame)
            newFrame();
        else if (e.getSource() == m_eventTimer) {
            m_dmEventCanvas.render(m_myDesktopManager.getCounts());
            m_myDesktopManager.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 DesktopManagerDemo();
    }
}

class MyDesktopManager extends DefaultDesktopManager {
    protected int[] m_counts = new int[15];

    public void clearCounts() {
        for (int i = 0; i < 15; i++) {
            m_counts[i] = 0;
        }
    }

    public int[] getCounts() {
        return m_counts;
    }

    public void activateFrame(JInternalFrame f) {
        super.activateFrame(f);
        m_counts[0]++;
    }

    public void beginDraggingFrame(JComponent f) {
        m_counts[1]++;
    }

    public void beginResizingFrame(JComponent f, int direction) {
        m_counts[2]++;
    }

    public void closeFrame(JInternalFrame f) {
        super.closeFrame(f);
        m_counts[3]++;
    }

    public void deactivateFrame(JInternalFrame f) {
        super.deactivateFrame(f);
        m_counts[4]++;
    }

    public void deiconifyFrame(JInternalFrame f) {
        super.deiconifyFrame(f);
        m_counts[5]++;
    }

    public void dragFrame(JComponent f, int newX, int newY) {
        f.setLocation(newX, newY);
        m_counts[6]++;
    }

    public void endDraggingFrame(JComponent f) {
        m_counts[7]++;
    }

    public void endResizingFrame(JComponent f) {
        m_counts[8]++;
    }

    public void iconifyFrame(JInternalFrame f) {
        super.iconifyFrame(f);
        m_counts[9]++;
    }

    public void maximizeFrame(JInternalFrame f) {
        super.maximizeFrame(f);
        m_counts[10]++;
    }

    public void minimizeFrame(JInternalFrame f) {
        super.minimizeFrame(f);
        m_counts[11]++;
    }

    public void openFrame(JInternalFrame f) {
        m_counts[12]++;
    }

    public void resizeFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
        f.setBounds(newX, newY, newWidth, newHeight);
        m_counts[13]++;
    }

    public void setBoundsForFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
        f.setBounds(newX, newY, newWidth, newHeight);
        m_counts[14]++;
    }
}

class DMEventCanvas extends JComponent {
    protected Color[] m_colors = new Color[15];
    protected int[][] m_arrays = new int[15][12];

    public DMEventCanvas() {
        setPreferredSize(new Dimension(505, 255));
        for (int i = 0; i < 15; i++) {
            m_arrays[i] = new int[12];
            m_colors[i] = new Color(37 + i * 4, 37 + i * 4, 37 + i * 4);
        }
    }

    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 = 17;
        int cellwidth = 42;
        int currwidth = 0;
        int currheight = 0;

        for (int i = 0; i < 12; i++) {
            for (int j = 0; j < 15; 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 < 15; j++) {
                m_arrays[j][i] = m_arrays[j][i + 1];
            }
        }
        for (int k = 0; k < 15; k++) {
            m_arrays[k][11] = counts[k];
        }
        paintImmediately(new Rectangle(20, 20, 505, 255));
    }
}