JFrame und Applets zusammen nutzen

Status
Nicht offen für weitere Antworten.

Stubbikiller

Mitglied
Hallo zusammen. Folgendes Problem: Wir nehmen in der Schule gerade Threads durch und sollten mal versuchen irgendwas mit Threads zu programmieren. Ich habe mir über Jigloo (Plugin für Eclipse) nun ein Programm gebastelt, bestehend aus 3 Textfeldern (stellt die Ampel dar) und 3 Buttons (Start, Stop, Ende). Klick man auf start, soll die Ampel erst rot, dann gelb, dann grün anzeigen und solange wiederholen, bis man auf stop klickt. Allerdings führt Eclipse das Programm erst gar nicht aus, obwohl kein Fehler vorliegt. Das Programm wird nicht als Applet erkannt, da ich nicht "extends Applte" machen kann, da schon "extends javax.swing.JFrame" vorhanden ist. Kann ich irgendwie beides zusammen nutzen, oder kann ich das Programm anders nutzen. Ich weiß dass beim der Ampel noch kleinere Probleme sind, ich will im Moment nur so weit kommen, dass ich das Programm starten kann.
Im Voraus schon mal vielen Dank !!!
Hier der Quellcode:


----------------------------------------------------------------------------------------------------------------------------------------



Code:
package uebung8;

import javax.swing.JTextField;
import javax.swing.JButton;

import java.applet.Applet;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
/**
 * @author Thomas Steffen
 *
 * Folgendes auswählen, um die Schablone für den erstellten Typenkommentar zu ändern:
 * Fenster&Benutzervorgaben&Java&Codegenerierung&Code und Kommentare
 */
/**
* This code was generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a
* for-profit company or business) then you should purchase
* a license - please visit [url]www.cloudgarden.com[/url] for details.
*/

public class uebung8 extends javax.swing.JFrame {


	private JButton Ende;
	private JButton Stop;
	private JButton Start;
	private JTextField Gruen;
	private JTextField Gelb;
	private JTextField Rot;
	private Thread t = null;
	private boolean runFlag = true;
	
	public uebung8() {
		initGUI();
	}
	public static void main(String[] args) {
	}

	/**
	* Initializes the GUI.
	* Auto-generated code - any changes you make will disappear.
	*/
	public void initGUI(){
		try {
			preInitGUI();
			Rot = new JTextField();
			Gelb = new JTextField();
			Gruen = new JTextField();
			Start = new JButton();
			Stop = new JButton();
			Ende = new JButton();
			this.getContentPane().setLayout(null);
			this.setSize(new java.awt.Dimension(375,268));
			Rot.setEditable(false);
			Rot.setPreferredSize(new java.awt.Dimension(59,56));
			Rot.setBounds(new java.awt.Rectangle(19,20,59,56));
			this.getContentPane().add(Rot);
			Gelb.setEditable(false);
			Gelb.setPreferredSize(new java.awt.Dimension(60,56));
			Gelb.setBounds(new java.awt.Rectangle(19,88,60,56));
			this.getContentPane().add(Gelb);
			Gruen.setEditable(false);
			Gruen.setPreferredSize(new java.awt.Dimension(61,58));
			Gruen.setBounds(new java.awt.Rectangle(19,155,61,58));
			this.getContentPane().add(Gruen);
			Start.setText("Start");
			Start.setPreferredSize(new java.awt.Dimension(72,20));
			Start.setBounds(new java.awt.Rectangle(154,39,72,20));
			this.getContentPane().add(Start);
			Start.addActionListener( new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					StartActionPerformed(evt);
				}
			});
			Stop.setText("Stop");
			Stop.setPreferredSize(new java.awt.Dimension(72,20));
			Stop.setBounds(new java.awt.Rectangle(154,76,72,20));
			this.getContentPane().add(Stop);
			Stop.addActionListener( new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					StopActionPerformed(evt);
				}
			});
			Ende.setText("Ende");
			Ende.setPreferredSize(new java.awt.Dimension(71,20));
			Ende.setBounds(new java.awt.Rectangle(155,112,71,20));
			this.getContentPane().add(Ende);
			Ende.addActionListener( new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					EndeActionPerformed(evt);
				}
			});
	
			postInitGUI();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/** Add your pre-init code in here 	*/
	public void preInitGUI(){
	}

	/** Add your post-init code in here 	*/
	public void postInitGUI(){
	}
	
	class ampel implements Runnable {
		public void run()
				{
					runFlag = true;
					while (runFlag) {
						try { 
							while (runFlag){
							Rot.setBackground(Color.red);
						    Thread.sleep(1000);
							Gelb.setBackground(Color.yellow);
							Thread.sleep(1000);
							Gruen.setBackground(Color.green);
							Thread.sleep(1000);
							}
							
						} catch (InterruptedException e) {
						}
						
						}
				}
				
	}
	
	public void init() {

		initGUI();
		}	

	/**
	* Auto-generated code - any changes you make will disappear!!!
	* This static method creates a new instance of this class and shows
	* it inside a new JFrame, (unless it is already a JFrame).
	*/
	public static void showGUI(){
		try {
			uebung8 inst = new uebung8();
			inst.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		protected void StartActionPerformed(ActionEvent evt){
		if (t == null) {
		t = new Thread(new ampel());
		t.start();
	}
	return;
}

	
	protected void StopActionPerformed(ActionEvent evt){
		runFlag = false;
		t = null;
	}
	

	
	protected void EndeActionPerformed(ActionEvent evt){
		System.exit(0);
	}
}

----------------------------------------------------------------------------------------------------------------------------------------
 
Bei einer Appliaction wird diese Methode:
Code:
   public static void main(String[] args) {
   }

aufgerufen. Und hier musst du ein neue Instanz deines Frames machen, und es auf sichtbar (setVisible( true )) setzen.

mfg Beni
 
Hi Benny,

vielen Dank für deine schnelle Antwort. Allerdings kann ich mit der Antwort nicht wirklich viel Anfangen, da ich noch Anfänger bin. Wie genau muss ich was für einen Code an welcher Stelle einfügen? Im Voraus schon mal vielen Dank für deine Mühe !!!
 
Es ist weder möglich, eine Klasse aus Applet und JFrame abzuleiten, noch bringt es so viel.

Beni meinte folgendes: Du schreibst in deine main-Methode:
Code:
uebung8 u8 = new uebung8();
u8.setVisible (true);

Vielleicht hattet ihr das noch nicht.
Dann leitest du nicht aus JFrame sondern aus JApplet ab, und startest es im Browser.

Beides gleichzeitig geht nicht.
(Doch: mit der Klasse MainFrame im Java3D-API 🙂 )
 
Du kannst auch einem JFrame ein JApplet als Content hinzufügen. JApplet ist ja auch eine Component. Allerdings musst Du dann einige Methoden anpassen bzw. explizit aufrufen, die sonst automatisch vom Browser aufgerufen werden.
Das ganze Gebilde nennt sich dann auch Appletcation. (Kein Witz)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben