Java tutorial
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)); } }