JmeDesktopState


/*
 * Copyright (c) 2003-2006 jMonkeyEngine
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * * Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package testdesktop;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.Callable;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;

import com.jme.bounding.BoundingSphere;
import com.jme.input.MouseInput;
import com.jme.scene.shape.Sphere;
import com.jme.util.GameTaskQueueManager;
import com.jmex.awt.swingui.JMEDesktopState;
import com.jmex.game.StandardGame;
import com.jmex.game.state.BasicGameState;
import com.jmex.game.state.GameStateManager;

/**
 * @author Matthew D. Hicks
 */
public class TestJMEDesktopState {
   public static void main(String[] args) throws Exception {
      // Create our StandardGame with default settings
      final StandardGame game = new StandardGame("TestJMEDesktopState");
      game.start();
      
      // Lets add a game state behind with some content
      BasicGameState debugState = new BasicGameState("BasicGameState");
      GameStateManager.getInstance().attachChild(debugState);
      debugState.setActive(true);
      Sphere sphere = new Sphere("ExampleSphere", 50, 50, 5.0f);
      sphere.setRandomColors();
      sphere.updateRenderState();
      sphere.setModelBound(new BoundingSphere());
      sphere.updateModelBound();
      debugState.getRootNode().attachChild(sphere);
      
      // Instantiate and add our JMEDesktopState
      final JMEDesktopState desktopState = new JMEDesktopState();
      GameStateManager.getInstance().attachChild(desktopState);
      desktopState.setActive(true);
      
      GameTaskQueueManager.getManager().update(new Callable<Object>() {
         public Object call() throws Exception {
            // Add a Quit button
            JButton button = new JButton("Quit" );
              desktopState.getDesktop().getJDesktop().add(button);
              button.setLocation(0, 0);
              button.setSize(button.getPreferredSize());
              button.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                  game.finish();
               }
              });
             
              // Add JInternalFrame
              JInternalFrame frame = new JInternalFrame("Test Internal Frame", true, true, true);
              frame.setSize(200, 200);
              frame.setLocation(100, 100);
              frame.setVisible(true);
              desktopState.getDesktop().getJDesktop().add(frame);
              showOptionsDialog(desktopState);
              // Set the cursor to visible
              MouseInput.get().setCursorVisible(true);
             
            return null;
         }
        });
   }

   private static void showOptionsDialog(final JMEDesktopState desktop) {
      final JDesktopPane desktopPane = desktop.getDesktop().getJDesktop();
      final JInternalFrame modalDialog = new JInternalFrame("Options");

      JPanel jpanelMain = new JPanel();
      jpanelMain.setLayout(new BoxLayout(jpanelMain, BoxLayout.Y_AXIS));

      final JComboBox jcombobox = new JComboBox(new Object[]{"Item 1", "Item 2", "Item 3", "4", "5", "6", "7", "8", "9"});
      jcombobox.setEditable(true);
      jpanelMain.add(jcombobox);

      JPanel jpanelMainB = new JPanel();
      jpanelMainB.setAlignmentX(Component.BOTTOM_ALIGNMENT);
      //jpanelMainB.setLayout(new BoxLayout(jpanelMain, BoxLayout.Y_AXIS));
      jpanelMain.add(jpanelMainB);
      JButton cancelButton = new JButton("Cancel");
      //cancelButton.setAlignmentX(Component.BOTTOM_ALIGNMENT);
      jpanelMainB.add(cancelButton);
      cancelButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            modalDialog.setVisible(false);
            desktop.getDesktop().setModalComponent(null);
            desktopPane.remove(modalDialog);
         }
      });

      modalDialog.getContentPane().add(jpanelMain);
      desktop.getDesktop().setModalComponent(modalDialog);
      desktopPane.add(modalDialog, 0);
      modalDialog.setVisible(true);
      modalDialog.setSize(modalDialog.getPreferredSize());
      //modalDialog.setSize(new Dimension(400,300));
      modalDialog.setLocation((desktopPane.getWidth()-modalDialog.getWidth())/2,
            (desktopPane.getHeight()-modalDialog.getHeight())/2);
      //desktop.setFocusOwner(optionPane);
      //desktop.getDesktop().setFocusOwner(jpanelMain); //DOESN'T WORK!
   }
}



Test I've written to test JComboBox that doesn't work with the mouse. I don't know whats wrong but I suppose the problem lies in com.jmex.awt.swingui.JMEDesktopState

Thanks SF