package com.ardor3d.example.canvas; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URISyntaxException; import javax.swing.JFrame; import com.ardor3d.example.Purpose; import com.ardor3d.framework.DisplaySettings; import com.ardor3d.framework.FrameHandler; import com.ardor3d.framework.jogl.JoglCanvasRenderer; import com.ardor3d.framework.jogl.awt.JoglAwtCanvas; import com.ardor3d.image.util.awt.AWTImageLoader; import com.ardor3d.input.ControllerWrapper; import com.ardor3d.input.Key; import com.ardor3d.input.PhysicalLayer; import com.ardor3d.input.awt.AwtFocusWrapper; import com.ardor3d.input.awt.AwtKeyboardWrapper; import com.ardor3d.input.awt.AwtMouseManager; import com.ardor3d.input.awt.AwtMouseWrapper; import com.ardor3d.input.logical.DummyControllerWrapper; import com.ardor3d.input.logical.LogicalLayer; import com.ardor3d.util.Timer; import com.ardor3d.util.resource.ResourceLocatorTool; import com.ardor3d.util.resource.SimpleResourceLocator; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Point; import javax.swing.JComponent; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; public class SwingTestTabPane { public static void main(final String[] args) throws Exception { System.setProperty("ardor3d.useMultipleContexts", "true"); final Timer timer = new Timer(); final FrameHandler frameWork1 = new FrameHandler(timer); final FrameHandler frameWork2 = new FrameHandler(timer); final MyExit exit = new MyExit(); final LogicalLayer logicalLayer = new LogicalLayer(); final ExampleScene scene1 = new ExampleScene(); final RotatingCubeGame game1 = new RotatingCubeGame(scene1, exit, logicalLayer, Key.T); final ExampleScene scene2 = new ExampleScene(); final RotatingCubeGame game2 = new RotatingCubeGame(scene2, exit, logicalLayer, Key.G); frameWork1.addUpdater(game1); frameWork1.addUpdater(game2); final FrameHandler frameWork = frameWork1; AWTImageLoader.registerLoader(); try { final SimpleResourceLocator srl = new SimpleResourceLocator(ResourceLocatorTool.getClassPathResource( JoglSwingExample.class, "com/ardor3d/example/media/")); ResourceLocatorTool.addResourceLocator(ResourceLocatorTool.TYPE_TEXTURE, srl); } catch (final URISyntaxException ex) { ex.printStackTrace(); } final JTabbedPane outerComp = new JTabbedPane(); //final JPanel outerComp = new JPanel(); final JFrame frame = createAndShowFrame("JTabbedPane Test", null, null, new Dimension(400, 400), null, true); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { exit.exit(); } }); SwingUtilities.invokeLater(new Runnable() { public void run() { try { Component canvas1 = getComponent(scene1, logicalLayer, frameWork); outerComp.add(canvas1); Component canvas2 = getComponent(scene2, logicalLayer, frameWork); outerComp.add(canvas2); frame.add(outerComp); } catch (Exception e) { e.printStackTrace(); } } }); game1.init(); game2.init(); while (!exit.isExit()) { frameWork.updateFrame(); java.lang.Thread.sleep(200); } frame.dispose(); System.exit(0); } private static Component getComponent(final ExampleScene scene, final LogicalLayer logicalLayer, final FrameHandler frameWork) throws Exception { final JoglCanvasRenderer canvasRenderer = new JoglCanvasRenderer(scene); final DisplaySettings settings = new DisplaySettings(400, 400, 24, 0, 0, 16, 0, 0, false, false); final JoglAwtCanvas theCanvas = new JoglAwtCanvas(settings, canvasRenderer); final AwtKeyboardWrapper keyboardWrapper = new AwtKeyboardWrapper(theCanvas); final AwtFocusWrapper focusWrapper = new AwtFocusWrapper(theCanvas); final AwtMouseManager mouseManager = new AwtMouseManager(theCanvas); final AwtMouseWrapper mouseWrapper = new AwtMouseWrapper(theCanvas, mouseManager); final ControllerWrapper controllerWrapper = new DummyControllerWrapper(); final PhysicalLayer pl = new PhysicalLayer(keyboardWrapper, mouseWrapper, controllerWrapper, focusWrapper); logicalLayer.registerInput(theCanvas, pl); frameWork.addCanvas(theCanvas); return theCanvas; } private static class MyExit implements Exit { private volatile boolean exit = false; @Override public void exit() { exit = true; } public boolean isExit() { return exit; } } public static JFrame createAndShowFrame(final String title, final Component component, final JMenuBar menuBar, final Dimension size, final Point loc, final boolean exitOnClose) { //Schedule a job for the event dispatch thread: //creating and showing this application's GUI. final JFrame frame = new JFrame(title); SwingUtilities.invokeLater(new Runnable() { public void run() { //Turn off metal's use of bold fonts UIManager.put("swing.boldMetal", Boolean.FALSE); //JFrame frame = new JFrame(title); if (menuBar != null) { frame.setJMenuBar(menuBar); } if (exitOnClose) { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //Add content to the window. if (component != null) { frame.getContentPane().add(component); } if (size != null) { frame.setPreferredSize(size); } if (loc != null) { frame.setLocation(loc.x, loc.y); } //Display the window. frame.pack(); frame.setVisible(true); } }); return frame; } }