2012-03-27 16 views
2

Gibt es eine Möglichkeit, ein Applet (JBufferedApplet, um genau zu sein) zu einem JFrame (oder einem AWT-Rahmen) hinzuzufügen.JApplet zu JFrame (oder AWT-Rahmen) hinzufügen

Ich habe das schon versucht, aber es sieht so aus, als ob das Applet einfach nicht läuft. Es macht die Hintergrundfarbe des JFrames grau (die gleiche Farbe des Applets), aber nicht mehr.

Es gibt keine Möglichkeit, das JApplet zu einem JPanel zu ändern (ich habe keinen Zugriff auf den Code).

Alles, was für den Moment getan werden muss, ist das Applet zu einem JFrame/AWT-Rahmen hinzufügen

Dies ist der Code, den ich habe bisher:

import javax.swing.JFrame; 

public class FormFrame extends JFrame { 

    public FormFrame() { 
     super("Oracle Forms"); 
     Main m = new Main(); 
     getContentPane().add(m); //add(m); 
     setSize(800, 600); 
     setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new FormFrame(); 
    } 

} 

Alles, was es gibt, ist die Hintergrundfarbe des Applets. Es sieht so aus, als ob das Applet nicht läuft.

+0

Hattest du keine weitere Frage zum Hinzufügen eines Applets zu einem Frame? BTW - speziell was ist JBufferedApplet? Haben Sie eine URL zu der Site, auf der sie verteilt wird? Zugriff auf die URL einer funktionierenden Version? –

+0

Ja, es gab einen anderen Thread, aber als ich versuchte, ihn zu bearbeiten, gab es ein Problem, um den JFrame hinzuzufügen, an dem ich gerade arbeitete. Und ich konnte den Thread nicht mehr finden, also musste ich einen neuen öffnen. JBufferedApplet wird von Oracle speziell für Oracle Forms entwickelt (glaube ich). Es stammt nur von Applet. Ich weiß auch nicht viel darüber, weil es nicht viele Informationen darüber gibt. – Arolition

Antwort

4

Sie können immer versuchen, das Applet contentPane, so etwas wie hinzufügen:

public class FormFrame extends JFrame { 

    public FormFrame() { 
     super("Oracle Forms"); 
     MyApplet myApplet = new MyApplet(); 
     myApplet.start(); 
     myApplet.init(); 
     getContentPane().add(myApplet.getContentPane()); 
     setSize(800, 600); // not sure about this. Usually better to call pack(); 
     setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new FormFrame(); 
     } 
     }); 
    } 
} 

Nur nicht vergessen des Applets init() Methode aufrufen, damit es alle seine Komponenten initialisieren.

Edit: Änderungen für die Thread-Sicherheit gemäß der hervorragenden Empfehlung von trashgod gemacht.

+0

Ich habe das versucht, habe es nicht behoben. Ich habe auch versucht, 'myApplet.start()' hinzuzufügen, aber auch negativ. Ich habe versucht, den AppletContext auszudrucken, aber es gibt eine NullPointerException. Wenn ich versuche, das Applet separat in Netbeans auszuführen, funktioniert es perfekt. Aus irgendeinem Grund scheint es, dass das Applet nicht ausgeführt wird. – Arolition

+1

@Arolition: Was passiert, wenn Sie die Methoden 'start()' und 'init()' des Applets aufrufen, bevor Sie das contentPane() des Applets extrahieren? –

+1

Auch Applets müssen [Initial Threads] beachten (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod