Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wie lässt man ein Applet, in einem JFrame erscheinen?
der titel ist meine Frage,
man muss doch irgendwie mithilfe eines "Rectangles" ein Applet innerhalb eines JFrames ersccheinen lassen können, wie danke für all eure Antworten,..
Aus der API ist zu entnehmen, dass ein (J)Applet von java.awt.Panel abgeleitet ist. Du müsstest es also problemlos in Deinem JFrame einbetten können (add(deinApplet));
Das ist richtig, legt aber gleichzeitig Stolperdrähte aus.
Die Methoden das Applet-Lebenszyklus müssen dann vom Programmierer aufgerufen werden, sonst passiert gar nichts.
Mach das lieber etwas anders:
Schreib dir
1. ein ganz normales Panel, welches den Inhalt bekommen soll
2. ein Applet, welchem du dieses Panel hinzufügst und
3. einen Frame, dem du dieses Panel hinzufügst.
Wenn du dann daraus noch eine Jar-Datei machen willst, setzt du im Manifest noch die Main-Class. Das Applet wird sowieso über eine Webseite gestartet.
BTW AWT- und Swing-Komponenten sollten nicht miteinander gemischt werden.
Noch viel schwieriger dürfte es sein, Instanzen von AppletStub und AppletContext zu bekommen, um z.B. die Vorzüge von "getClip()" usw. zu verwenden (sonst würde man ja kein Applet in einem normalen (J)Frame verwenden wollen/müssen/brauchen/owai). Lässt man ein Applet in einem normalen (J)Frame als Anwendung laufen, werden diese nämlich nicht durch den AppletViewer instanziert. Ich jedenfalls musste das bisher immer selbst machen. Hat da vllt. jemand ein Vorschlag ob das irgendwie automatisch geht (ohne AppletViewer)?
ja also hört mal, mir ist was aufgefallen, ihr kennt mein Problem bestimmt alle von meinem vorherigen Thread http://www.java-forum.org/java-basics-anfaenger-themen/80945-help-applets-please.html
auf jeden fall, mir ist was klar geworden, wenn ich das wie folgt mache, wird das Applet gestartet, die einzelnen sachen passieren auch, aber das TextField und so wird net angezeigt, wiesO?
Code:
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class Chat
{
public static void main(String[]args)
{
JFrame f = new JFrame();
f.setVisible(true);
chatapplet app = new chatapplet();
f.setLayout(new BorderLayout());
f.add(app, BorderLayout.CENTER);
}
}
Code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.TextField;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
public class chatapplet extends Applet implements Runnable
{
public static final int PORT = 2;
Socket socket;
DataInputStream in;
PrintStream out;
TextField inputfield;
TextArea outputarea;
Thread thread;
public void init()
{
inputfield = new TextField();
outputarea = new TextArea();
outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
outputarea.setEditable(false);
this.setLayout(new BorderLayout());
this.add("South", inputfield);
this.add("Center", outputarea);
this.setBackground(Color.lightGray);
this.setForeground(Color.black);
inputfield.setBackground(Color.white);
outputarea.setBackground(Color.white);
}
public void start()
{
try
{
socket = new Socket(this.getCodeBase().getHost(), PORT);
in = new DataInputStream(socket.getInputStream());
out = new PrintStream(socket.getOutputStream());
} catch (IOException e)
{
this.showStatus(e.toString());
say("Verbindung zum Server fehlgeschlagen!");
System.exit(1);
}
say("Verbindung zum Server aufgenommen...");
if (thread == null)
{
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
public void stop()
{
try
{
socket.close();
} catch (IOException e)
{
this.showStatus(e.toString());
}
if ((thread !=null) && thread.isAlive())
{
thread.stop();
thread = null;
}
}
public void run()
{
String line;
try
{
while(true)
{
line = in.readLine();
if(line!=null)
outputarea.appendText(line+'\n' );
}
} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
}
public boolean action(Event e, Object what)
{
if (e.target==inputfield)
{
String inp=(String)"Imperator: "+ e.arg;
out.println(inp);
inputfield.setText("");
return true;
}
return false;
}
public void say(String msg)
{
outputarea.appendText("*** "+msg+" ***\n");
}
public static void main()
{
new chatapplet();
}
}
Aber dann bin ich auf die Idee gekommen, alles, was in der start() methode steht,
mal in der public methode zu versuchen, dann erschien zwar das textfield, aber der rest funktionierte nicht, man konnte keine nachricht eingeben usw...
wieso?
Code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.TextField;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
public class chatapplet extends Applet implements Runnable
{
public static final int PORT = 2;
Socket socket;
DataInputStream in;
PrintStream out;
TextField inputfield;
TextArea outputarea;
Thread thread;
public void init()
{
inputfield = new TextField();
outputarea = new TextArea();
outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
outputarea.setEditable(false);
this.setLayout(new BorderLayout());
this.add("South", inputfield);
this.add("Center", outputarea);
this.setBackground(Color.lightGray);
this.setForeground(Color.black);
inputfield.setBackground(Color.white);
outputarea.setBackground(Color.white);
}
public void start()
{
try
{
socket = new Socket(this.getCodeBase().getHost(), PORT);
in = new DataInputStream(socket.getInputStream());
out = new PrintStream(socket.getOutputStream());
} catch (IOException e)
{
this.showStatus(e.toString());
say("Verbindung zum Server fehlgeschlagen!");
System.exit(1);
}
say("Verbindung zum Server aufgenommen...");
if (thread == null)
{
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
public void stop()
{
try
{
socket.close();
} catch (IOException e)
{
this.showStatus(e.toString());
}
if ((thread !=null) && thread.isAlive())
{
thread.stop();
thread = null;
}
}
public void run()
{
String line;
try
{
while(true)
{
line = in.readLine();
if(line!=null)
outputarea.appendText(line+'\n' );
}
} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
}
public boolean action(Event e, Object what)
{
if (e.target==inputfield)
{
String inp=(String)"Imperator: "+ e.arg;
out.println(inp);
inputfield.setText("");
return true;
}
return false;
}
public chatapplet()
{
inputfield = new TextField();
outputarea = new TextArea();
outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
outputarea.setEditable(false);
this.setLayout(new BorderLayout());
this.add("South", inputfield);
this.add("Center", outputarea);
this.setBackground(Color.lightGray);
this.setForeground(Color.black);
inputfield.setBackground(Color.white);
outputarea.setBackground(Color.white);
}
public void say(String msg)
{
outputarea.appendText("*** "+msg+" ***\n");
}
public static void main()
{
new chatapplet();
}
}
Das hat auch nicht funktioniert,
kann mir einer jetzt einen Ratschlag geben?
auf jeden fall, mir ist was klar geworden, wenn ich das wie folgt mache, wird das Applet gestartet, die einzelnen sachen passieren auch, aber das TextField und so wird net angezeigt, wiesO?
...
Aber dann bin ich auf die Idee gekommen, alles, was in der start() methode steht,
mal in der public methode zu versuchen, dann erschien zwar das textfield, aber der rest funktionierte nicht, man konnte keine nachricht eingeben usw...
wieso?
...
Das hat auch nicht funktioniert,
kann mir einer jetzt einen Ratschlag geben?
Benutze einfach nur dann Applets wenn sie auch durch einen Browser genutzt
werden sollen. Wenn du unabhängig sein willst, realisier deine Anwendung in einem
gewöhnlichen (J)Panel, der dann je nach Notwendigkeit von einem Applet
oder einem (J)Frame eingebunden wird.
sorry, das geht aber nur mit applet, dieses chatapplet, kann mir keiner hier von diesem ganzem Forum eine für euch ganz einfache Frage eine Antwort geben, was ich falsch mache?
sorry, das geht aber nur mit applet, dieses chatapplet, kann mir keiner hier von diesem ganzem Forum eine für euch ganz einfache Frage eine Antwort geben, was ich falsch mache?
sorry, das geht aber nur mit applet, dieses chatapplet, kann mir keiner hier von diesem ganzem Forum eine für euch ganz einfache Frage eine Antwort geben, was ich falsch mache?
Kann ich mir angesichts der hier von dir durchgezogenen Odyssee und deinen Programmierkenntnissen nicht vorstellen.
Wenn du wirklich eine Lösung hast, wären sicher die Benutzer, die ein ähnliches Problem haben und hier danach suchen, dankbar, wenn du sie mit ihnen teilst.