AWT BaseFrame

Status
Nicht offen für weitere Antworten.

siebeck

Mitglied
Hallo,

bin Java-Anfänger und wollte mit Programmen ein wenig experimentieren:

Ich möchte eine zentrale Startklasse haben, wo das Programm beginnt:
Code:
package Daten;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Start {
	public static void main(String[] args) {
		Frame Bf=new BaseFrame();
			}
}
Nun will ich das BaseFrame-Programm in einer separaten Klasse behandeln, einfach um das Programm übersichtlicher zu machen, daher folgendes Programm:

package Daten;

Code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BaseFrame extends Frame {
	BaseFrame() {
	 Frame f=new BaseFrame();
	 f.setLayout( new FlowLayout() );
	 Button b=new Button("Test");
	 b.addActionListener(new ActionListener() {
		 public void actionPerformed(ActionEvent e) {
			 System.exit(0);
		 }
	 });
	 f.add(b);
	 System.out.println("Testwrerer");
	 f.setVisible(true);
}
}

Nun erscheint beim kompilieren die Fehlermeldung: java.lang.StackOverflowError

Daher meine Frage: Darf ich das BaseFrame überhaupt in einer separaten Klasse behandeln?

Stepi1974
[Edit by foobar: Codetags eingefügt]
 

Wildcard

Top Contributor
Bitte in Zukunft die Code-Tags verwenden wenn du Code postest.
Natürlich darfst(sollst) du das in eine eigene Klasse machen, aber du deine Implementierung ist falsch:
Code:
 BaseFrame() {
Frame f=new BaseFrame();
Du Rufst im BaseFrame Konstruktor den BaseFrame Konstruktor auf. Der neue BaseFrame instanziert dann selbst wieder einen BaseFrame, usw usw. Das ganze geht solange bis der Stack überläuft.
 

DocMcFly

Bekanntes Mitglied
Code:
public class BaseFrame extends Frame

Da Du Deine Klasse BaseFrame von Frame ableitest, ist die Klasse selbst ein Frame und Du brauchst Dir keine neue erzeugen ( mit new Frame(); )

Willst Du zB Deinen BaseFrame anzeigen lassen, musst Du die Methode der eigenen Klasse verwendet werden. Also:

Code:
this.visible(true);

Verstehst Du?

Clemens
 

siebeck

Mitglied
Hallo,

wenn ich das jetzt richtig verstanden habe,

muß der Code von BaseFrame folgendermaßen aussehen:

package Daten;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BaseFrame extends Frame {
BaseFrame() {

this.setLayout( new FlowLayout() );
Button b=new Button("Test");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.add(b);
System.out.println("Testwrerer");
this.setVisible(true);
}
}

das heißt, anstatt f.setLayout (vorheriger Code) verwende ich nun this.setLayout.

So habe ich das Programm geändert, und es funktioniert auch.
 

siebeck

Mitglied
Hallo,

ich möchte das Programm weiter entwickeln. Dazu will ich ein separates Fenster öffnen (mit DatenFrame).

Zunächst hatte ich ja BaseFrame erzeugt.

public class BaseFrame extends Frame {

BaseFrame() {

//layout Schaltfläche
this.setLayout( new FlowLayout() );
this.setSize(300,400);
this.setLocation(200,200);

//Label
this.add(new Label("Hauptmenü Ferienwohnung-Stastistik"));

//Schaltfläche
Button b=new Button("Eingabe Daten");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Eingabe Fewo-Daten");
DatenFrame daten=new DatenFrame();
//System.exit(0);
}
});
this.add(b);

Nun soll bei Klick auf die Schaltfläche ein weiteres separates Fenster geöffnet werden (mit DatenFrame).

Dazu habe ich folgendes Programm geschrieben:

public class DatenFrame extends Frame{

DatenFrame(){
this.setLayout( new FlowLayout() );
this.setSize(300,400);
this.setLocation(200,200);

//Label
this.add(new Label("Eingabe FewoDaten"));

// Textfelder
TextField tf=new TextField(" ",40);
tf.setEditable(true);
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.add(tf);
}

Leider öffnet kein 2.Fenster?

Woran liegts?

Danke für die Antworten bereits im voraus.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben