    001/* ========================================================================
    002 * JCommon : a free general purpose class library for the Java(tm) platform
    003 * ========================================================================
    004 *
    005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
    006 *
    007 * Project Info:  http://www.jfree.org/jcommon/index.html
    008 *
    009 * This library is free software; you can redistribute it and/or modify it
    010 * under the terms of the GNU Lesser General Public License as published by
    011 * the Free Software Foundation; either version 2.1 of the License, or
    012 * (at your option) any later version.
    013 *
    014 * This library is distributed in the hope that it will be useful, but
    015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017 * License for more details.
    018 *
    019 * You should have received a copy of the GNU Lesser General Public
    020 * License along with this library; if not, write to the Free Software
    021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022 * USA.
    023 *
    024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025 * in the United States and other countries.]
    026 *
    027 * ----------------------
    028 * AbstractTabbedGUI.java
    029 * ----------------------
    030 * (C)opyright 2004, by Thomas Morgner and Contributors.
    031 *
    032 * Original Author:  Thomas Morgner;
    033 * Contributor(s):   David Gilbert (for Object Refinery Limited);
    034 *
    035 * $Id: TabbedFrame.java,v 1.8 2008/09/10 09:19:04 mungady Exp $
    036 *
    037 * Changes
    038 * -------------------------
    039 * 16-Feb-2004 : Initial version
    040 * 07-Jun-2004 : Added standard header (DG);
    041 */
    042
    043package org.jfree.ui.tabbedui;
    044
    045import java.awt.BorderLayout;
    046import java.awt.event.ActionEvent;
    047import java.awt.event.WindowAdapter;
    048import java.awt.event.WindowEvent;
    049import java.beans.PropertyChangeEvent;
    050import java.beans.PropertyChangeListener;
    051import javax.swing.JFrame;
    052import javax.swing.JPanel;
    053
    054/**
    055 * A JFrame implementation that uses a tabbed UI as backend.
    056 *
    057 * @author Thomas Morgner
    058 */
    059public class TabbedFrame extends JFrame {
    060
    061    /** The backend. */
    062    private AbstractTabbedUI tabbedUI;
    063
    064    /**
    065     * A property change listener that waits for the menubar to change.
    066     */
    067    private class MenuBarChangeListener implements PropertyChangeListener {
    068
    069        /**
    070         * Creates a new change listener.
    071         */
    072        public MenuBarChangeListener() {
    073        }
    074
    075        /**
    076         * This method gets called when a bound property is changed.
    077         *
    078         * @param evt A PropertyChangeEvent object describing the event source
    079         *            and the property that has changed.
    080         */
    081        public void propertyChange(final PropertyChangeEvent evt) {
    082            if (evt.getPropertyName().equals(AbstractTabbedUI.JMENUBAR_PROPERTY)) {
    083                setJMenuBar(getTabbedUI().getJMenuBar());
    084            }
    085        }
    086    }
    087
    088    /**
    089     * Default constructor.
    090     */
    091    public TabbedFrame() {
    092    }
    093
    094    /**
    095     * Creates a new tabbed frame with the specified title.
    096     *
    097     * @param title  the frame title.
    098     */
    099    public TabbedFrame(final String title) {
    100        super(title);
    101    }
    102
    103    /**
    104     * Returns the UI implementation for the frame.
    105     *
    106     * @return Returns the tabbedUI.
    107     */
    108    protected final AbstractTabbedUI getTabbedUI()
    109    {
    110      return this.tabbedUI;
    111    }
    112
    113    /**
    114     * Initialises the dialog.
    115     *
    116     * @param tabbedUI  the UI that controls the dialog.
    117     */
    118    public void init(final AbstractTabbedUI tabbedUI) {
    119
    120        this.tabbedUI = tabbedUI;
    121        this.tabbedUI.addPropertyChangeListener(
    122            AbstractTabbedUI.JMENUBAR_PROPERTY, new MenuBarChangeListener()
    123        );
    124
    125        addWindowListener(new WindowAdapter() {
    126            public void windowClosing(final WindowEvent e) {
    127                getTabbedUI().getCloseAction().actionPerformed
    128                    (new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null, 0));
    129            }
    130        });
    131
    132        final JPanel panel = new JPanel();
    133        panel.setLayout(new BorderLayout());
    134        panel.add(tabbedUI, BorderLayout.CENTER);
    135        setContentPane(panel);
    136        setJMenuBar(tabbedUI.getJMenuBar());
    137    }
    138
    139}