001    /*
002     * $Id: JXFrame.java,v 1.6 2005/10/12 11:26:57 kleopatra Exp $
003     *
004     * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005     * Santa Clara, California 95054, U.S.A. All rights reserved.
006     *
007     * This library is free software; you can redistribute it and/or
008     * modify it under the terms of the GNU Lesser General Public
009     * License as published by the Free Software Foundation; either
010     * version 2.1 of the License, or (at your option) any later version.
011     * 
012     * This library is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015     * Lesser General Public License for more details.
016     * 
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this library; if not, write to the Free Software
019     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020     */
021    
022    package org.jdesktop.swingx;
023    
024    import java.awt.Component;
025    
026    import javax.swing.JFrame;
027    import javax.swing.JRootPane;
028    
029    
030    /**
031     * A smarter JFrame specifically used for top level frames for Applications.
032     * This frame uses a JXRootPane.
033     */
034    public class JXFrame extends JFrame {
035    
036        public JXFrame() {
037            this(null, false);
038        }
039        
040        public JXFrame(String title, boolean exitOnClose) {
041            super(title);
042            if (exitOnClose) {
043                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
044            }
045        }
046    
047        public JXFrame(String title) {
048            this(title, false);
049        }
050    
051        /**
052         * Overloaded to create a JXRootPane.
053         */
054        protected JRootPane createRootPane() {
055            return new JXRootPane();
056        }
057    
058        /**
059         * Overloaded to make this public.
060         */
061        public void setRootPane(JRootPane root) {
062            super.setRootPane(root);
063        }
064    
065        /**
066         * Add a component to the Frame.
067         */
068        public void addComponent(Component comp) {
069            JXRootPane root = getRootPaneExt();
070            if (root != null) {
071                root.addComponent(comp);
072            }
073            // XXX should probably fire some sort of container event.
074        }
075    
076        /**
077         * Removes a component from the frame.
078         */
079        public void removeComponent(Component comp) {
080            JXRootPane root = getRootPaneExt();
081            if (root != null) {
082                root.removeComponent(comp);
083            }
084            // XXX should probably fire some sort of container event.
085        }
086    
087        /**
088         * Return the extended root pane. If this frame doesn't contain
089         * an extended root pane the root pane should be accessed with
090         * getRootPane().
091         *
092         * @return the extended root pane or null.
093         */
094        public JXRootPane getRootPaneExt() {
095            if (rootPane instanceof JXRootPane) {
096                return (JXRootPane)rootPane;
097            }
098            return null;
099        }
100    
101    }
102