1 package jme3test.awt;
2 
3 import com.jme3.app.SimpleApplication;
4 import com.jme3.material.Material;
5 import com.jme3.math.Vector3f;
6 import com.jme3.scene.Geometry;
7 import com.jme3.scene.shape.Box;
8 import com.jme3.system.AppSettings;
9 import com.jme3.system.awt.AwtPanel;
10 import com.jme3.system.awt.AwtPanelsContext;
11 import com.jme3.system.awt.PaintMode;
12 import java.awt.BorderLayout;
13 import java.awt.Dimension;
14 import java.awt.Toolkit;
15 import java.awt.event.WindowAdapter;
16 import java.awt.event.WindowEvent;
17 import java.util.logging.Level;
18 import java.util.logging.Logger;
19 import javax.swing.JFrame;
20 import javax.swing.SwingUtilities;
21 
22 public class TestAwtPanels extends SimpleApplication {
23 
24     private static TestAwtPanels app;
25     private static AwtPanel panel, panel2;
26     private static int panelsClosed = 0;
27 
createWindowForPanel(AwtPanel panel, int location)28     private static void createWindowForPanel(AwtPanel panel, int location){
29         JFrame frame = new JFrame("Render Display " + location);
30         frame.getContentPane().setLayout(new BorderLayout());
31         frame.getContentPane().add(panel, BorderLayout.CENTER);
32         frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
33         frame.addWindowListener(new WindowAdapter() {
34             @Override
35             public void windowClosed(WindowEvent e) {
36                 if (++panelsClosed == 2){
37                     app.stop();
38                 }
39             }
40         });
41         frame.pack();
42         frame.setLocation(location, Toolkit.getDefaultToolkit().getScreenSize().height - 400);
43         frame.setVisible(true);
44     }
45 
main(String[] args)46     public static void main(String[] args){
47         Logger.getLogger("com.jme3").setLevel(Level.WARNING);
48 
49         app = new TestAwtPanels();
50         app.setShowSettings(false);
51         AppSettings settings = new AppSettings(true);
52         settings.setCustomRenderer(AwtPanelsContext.class);
53         settings.setFrameRate(60);
54         app.setSettings(settings);
55         app.start();
56 
57         SwingUtilities.invokeLater(new Runnable(){
58             public void run(){
59                 final AwtPanelsContext ctx = (AwtPanelsContext) app.getContext();
60                 panel = ctx.createPanel(PaintMode.Accelerated);
61                 panel.setPreferredSize(new Dimension(400, 300));
62                 ctx.setInputSource(panel);
63 
64                 panel2 = ctx.createPanel(PaintMode.Accelerated);
65                 panel2.setPreferredSize(new Dimension(400, 300));
66 
67                 createWindowForPanel(panel, 300);
68                 createWindowForPanel(panel2, 700);
69             }
70         });
71     }
72 
73     @Override
simpleInitApp()74     public void simpleInitApp() {
75         flyCam.setDragToRotate(true);
76 
77         Box b = new Box(Vector3f.ZERO, 1, 1, 1);
78         Geometry geom = new Geometry("Box", b);
79         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
80         mat.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
81         geom.setMaterial(mat);
82         rootNode.attachChild(geom);
83 
84         panel.attachTo(true, viewPort);
85         guiViewPort.setClearFlags(true, true, true);
86         panel2.attachTo(false, guiViewPort);
87     }
88 }
89