001 /*
002 * Created on Apr 28, 2009
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005 * in compliance with the License. You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software distributed under the License
010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011 * or implied. See the License for the specific language governing permissions and limitations under
012 * the License.
013 *
014 * Copyright @2009-2010 the original author or authors.
015 */
016 package org.fest.swing.fixture;
017
018 import static org.fest.swing.edt.GuiActionRunner.execute;
019
020 import java.awt.Container;
021
022 import javax.swing.JFrame;
023
024 import org.fest.swing.annotation.RunsInEDT;
025 import org.fest.swing.core.Robot;
026 import org.fest.swing.edt.GuiQuery;
027
028 /**
029 * Understands utility methods related to <code>{@link Container}</code>s.
030 * @since 1.2
031 *
032 * @author Alex Ruiz
033 */
034 public final class Containers {
035
036 /** Name of the <code>JFrame</code>s created by this class. */
037 public static final String CREATED_FRAME_NAME = "org.fest.swing.CreatedFrameForContainer";
038
039 /**
040 * Creates a new <code>{@link JFrame}</code> and uses the given <code>{@link Container}</code> as its content pane.
041 * The created <code>JFrame</code> is wrapped and displayed by a <code>{@link FrameFixture}</code>.
042 * <p>
043 * <strong>Note:</strong>This method creates a new <code>{@link Robot}</code>. When using this method, please do not
044 * create any additional instances of <code>Robot</code>. Only one instance of <code>Robot</code> can exist per
045 * test class.
046 * </p>
047 * @param contentPane the <code>Container</code> to use as content pane for the <code>JFrame</code> to create.
048 * @return the created <code>FrameFixture</code>.
049 * @see #frameFor(Container)
050 */
051 @RunsInEDT
052 public static FrameFixture showInFrame(Container contentPane) {
053 FrameFixture frameFixture = frameFixtureFor(contentPane);
054 frameFixture.show();
055 return frameFixture;
056 }
057
058 /**
059 * Creates a new <code>{@link JFrame}</code> and uses the given <code>{@link Container}</code> as its content pane.
060 * The created <code>JFrame</code> is wrapped by a <code>{@link FrameFixture}</code>. Unlike
061 * <code>{@link #showInFrame(Container)}</code>, this method does <strong>not</strong> display the created
062 * <code>JFrame</code>.
063 * <p>
064 * <strong>Note:</strong>This method creates a new <code>{@link Robot}</code>. When using this method, please do not
065 * create any additional instances of <code>Robot</code>. Only one instance of <code>Robot</code> can exist per
066 * test class.
067 * </p>
068 * @param contentPane the <code>Container</code> to use as content pane for the <code>JFrame</code> to create.
069 * @return the created <code>FrameFixture</code>.
070 * @see #frameFor(Container)
071 */
072 @RunsInEDT
073 public static FrameFixture frameFixtureFor(Container contentPane) {
074 return new FrameFixture(frameFor(contentPane));
075 }
076
077 /**
078 * Creates a new <code>{@link JFrame}</code> and uses the given <code>{@link Container}</code> as its content pane.
079 * The created <code>JFrame</code> has the name specified by <code>{@link #CREATED_FRAME_NAME}</code>. This method
080 * is executed in the Event Dispatch Thread (EDT.)
081 * @param contentPane the <code>Container</code> to use as content pane for the <code>JFrame</code> to create.
082 * @return the created <code>JFrame</code>.
083 */
084 @RunsInEDT
085 public static JFrame frameFor(final Container contentPane) {
086 return execute(new GuiQuery<JFrame>() {
087 protected JFrame executeInEDT() throws Throwable {
088 JFrame frame = new JFrame("Created by FEST");
089 frame.setName(CREATED_FRAME_NAME);
090 frame.setContentPane(contentPane);
091 return frame;
092 }
093 });
094 }
095
096 private Containers() {}
097 }