Ver Mensaje Individual
  #15 (permalink)  
Antiguo 27/10/2009, 13:04
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: clase java que herede de applet

Hola,

El problema es que tu Applet no puede extender JApplet y JFrame al mismo tiempo. Y si no usas JApplet no corre en el browser. Así que tienes que crear 2 puntos de entrada diferentes.

Código Java:
Ver original
  1. package JPuzzle;
  2.  
  3. import JPuzzle.Graphics.Panel;
  4. import java.lang.reflect.InvocationTargetException;
  5.  
  6. /**
  7.  * La aplicación principal del juego Puzzle.
  8.  * Funciona tanto como un Applet como una aplicación Desktop.
  9.  * @author HackmanGT
  10.  */
  11. public class Puzzle extends javax.swing.JApplet {
  12.  
  13.     private static Panel panel;
  14.  
  15.     /**
  16.      * Aplicación principal.
  17.      * Inicializa el Applet.
  18.      */
  19.     @Override
  20.     public void init() {
  21.         super.init();
  22.         try {
  23.             javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
  24.                 public void run() {
  25.                     initComponents();
  26.                 }
  27.             });
  28.         } catch (InterruptedException ex) {
  29.             System.err.println(ex.getMessage());
  30.         } catch (InvocationTargetException ex) {
  31.             ex.printStackTrace();
  32.         }
  33.     }
  34.  
  35.     /**
  36.      * Inicializa el componente.
  37.      */
  38.     private void initComponents() {
  39.         setBackground(java.awt.Color.WHITE);
  40.         setLayout(new java.awt.BorderLayout());
  41.         panel = new Panel();
  42.         add(panel);
  43.     }
  44.  
  45.     /**
  46.      * Aplicación principal.
  47.      * Inicializa el Frame.
  48.      * @param args los argumentos de la línea de comandos
  49.      */
  50.     public static void main(String[] args) {
  51.         javax.swing.SwingUtilities.invokeLater(new Runnable() {
  52.             public void run() {
  53.                 createAndShowGUI();
  54.             }
  55.         });
  56.     }
  57.  
  58.     /**
  59.      * Inicializa el componente.
  60.      */
  61.     private static void createAndShowGUI() {
  62.         javax.swing.JFrame frame = new javax.swing.JFrame();
  63.         frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  64.         frame.setTitle(".: JPuzzle :.");
  65.         frame.setResizable(true);
  66.         frame.pack();
  67.         frame.setSize(640, 480);
  68.         frame.setLocationRelativeTo(null);
  69.         frame.add(new Panel());
  70.         frame.setVisible(true);
  71.     }
  72. }

En este caso se usa un JPanel (Panel()) para contener TODA la aplicación, y se crea un JFrame por aparte, si se ejecuta como Applet entonces se inserta el Panel dentro del contenedor JApplet, si se ejecuta como Desktop se crea el JFrame y se inserta el Panel dentro del JFrame.

En tu caso podrías crear una nueva clase que extienda JApplet y crear el JFrame en el init() y en el main(). Cuando se ejecute como Applet (init()), el espacio del Applet en el browser va a quedar vacío, pero te va a mostrar el JFrame por aparte. Y cuando se ejecute como Desktop (main()) va a mostrar el JFrame.

Saludos,