Ver Mensaje Individual
  #16 (permalink)  
Antiguo 27/10/2009, 18:02
giorgio_83
 
Fecha de Ingreso: febrero-2009
Mensajes: 29
Antigüedad: 15 años, 11 meses
Puntos: 1
Exclamación Respuesta: clase java que herede de applet

Hola de nuevo, elAntonie si que he mirado el bug, la URL que me pasaste, de hecho te contesté.

HackmanC , la clase no hereda de jframe y japplet al mismo tiempo, lo he intentando heredando de jframe y implementando runnable y tambien haciendo lo que comentas, de crear una entrada al programa por applet y que este sea el que llame despues a la clase que hereda de jframe, pero aun asi me ha tirado el error que al parecer es un bug, de todas formas mi clase applet esta eredando de Applet, no de Japplet asique probaré ese metodo y ya os cuento.

Muchas gracias a todos.

un saludo.

Cita:
Iniciado por HackmanC Ver Mensaje
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,