# Neues Frame über Button öffnen lassen



## grischan (31. Jan 2006)

Hallo,
ich wollte mir ein kleines Java-Programm schreiben um mir bei einer austellung den verkauf von tauben zu erleichtern

mein problem klingt eingentlich ziemlich banal (ist es vieleicht auch) aber ich hab schon das gesammte internet nach einer lösung durch gegoogelt und nix gefunden vieliecht könnt ihr mir helfen?

(1) 
In meinen Hauptmenü gibt es zum Beispiel die Schaltfläche "Taube hinzufügen". wenn man diese betätigt sollte sich ein neues Fenster öffnen, das Fenster ist im selben Projekt als  Add.java  geschrieben.


```
import java.awt.*;
import java.awt.event.*;

public class Main_Menu extends Frame implements ActionListener {
	
	private Button buttonAdd = new Button ("Taube hinzufügen");
	private Button buttonClose = new Button ("Schließen");
	private Button buttonDelete = new Button ("Taube löschen");
	private Button buttonSell = new Button ("Taube verkaufen");
	private Button buttonList = new Button ("Liste");
	private Button buttonSold = new Button ("verkaufte Tauben");
	
	public Main_Menu ()  {
		super ("Hauptmenü-Taubenverkauf");
		
			
		setLayout (null);
		setBackground(new Color(192, 192, 192));
				
		Label label1 = new Label ("Taubenverkauf");
		label1.setBounds (40, 30, 155, 25);
		add (label1);
		
		this.buttonAdd.setBounds(40, 80, 160, 25);
		this.add(this.buttonAdd);
		this.buttonDelete.setBounds(40, 110, 160, 25);
		this.add(this.buttonDelete);
		this.buttonSell.setBounds(40, 140, 160, 25);
		this.add(this.buttonSell);
		this.buttonSold.setBounds(40, 170, 160, 25);
		this.add(this.buttonSold);
		this.buttonList.setBounds(40, 220, 160, 25);
		this.add(this.buttonList);
		this.buttonClose.setBounds(40, 300, 160, 25);
		this.add(this.buttonClose);
		
		buttonClose.addActionListener(this);
		buttonAdd.addActionListener(this);
				
		}
	
		public void actionPerformed(ActionEvent event)
		{
			Object source = event.getSource ();
			if (source == this.buttonClose)
				onClose();
			else if (source == this.buttonAdd)
				onAdd();
		}
		public static void main(String[] args)
		  {
		    Main_Menu menu = new Main_Menu();
		    menu.setBounds(100, 100, 280, 350);
		    menu.setVisible(true);
		  }
		private void onClose () {
			setVisible(false);
			dispose();
			System.exit(0);
		}
		private void onAdd () {
		      Frame fenster = new Frame(Add());
		}
		
}
```

Leider bekomm ich nun die Meldung vom Compiler das die Zeile 

_Frame fenster = new Frame(Add());_

nicht compiliert werden kann:
 "The method Add() is undefined for the type Main_Menu	    line 63"

Kann mir da jemand weiter helfen?
Ich hab mitlerweile jedes verfügbare Tutorial für AWT und Swing durch gesehen und nichts gefunden.


----------



## Timmah (31. Jan 2006)

Wo ist denn die Methode Add() definiert, ich sehe die nicht...Insofern kann die auch nicht gefunden werden.

Ansonsten ist das schon richtig wie du das machst.
Du schreibst dir eben einen neuen Frame, den du per Knopfdruck erstellst.


----------



## grischan (1. Feb 2006)

ich habe die Funktion Add() in einer weiteren Datei Add.java geschrieben und will die nun halt über die Funktion onAdd() aufrufen?
Oder muss ich nun die Funktion Add() in die selbe Datei packen


----------



## Leroy42 (1. Feb 2006)

> ich hab schon das gesammte internet nach einer lösung durch gegoogelt



8,5 Milliarden Seiten :?: 
Respekt  

Du schreibst, daß die Funktion in einer Datei "Add.java" steckt. Ist es denn eine Funktion oder
eher eine Klasse. Dann wäre 'Add()' ja der Konstruktor dieser Klasse und du müßtest
die mit 'new Add()' aufrufen?

Sorry aber ohne den Code zu kennen, können wir nicht viel helfen  :cry:


----------



## Guest (1. Feb 2006)

würde es was helfen wenn ich die datein als eclipse project uploade?
ich wär das da einfach mal machen wenn ich zu hause bin

ps: genau nachgezählt hab ich noch nicht aaber 8,5 mrd könnte hinkommen :wink:


----------



## grischan (1. Feb 2006)

grischan hat gesagt.:
			
		

> würde es was helfen wenn ich die datein als eclipse project uploade?
> ich wär das da einfach mal machen wenn ich zu hause bin
> 
> ps: genau nachgezählt hab ich noch nicht aaber 8,5 mrd könnte hinkommen :wink:


----------



## grischan (1. Feb 2006)

achso, ja Add.java ist eine Klasse

ich hab auch schon versucht:
_ Add fenster = new Add(); _

leider sagt mir eclipse aber dass das nicht geht


----------



## Leroy42 (1. Feb 2006)

Add.java ist also eine Datei die die Klasse Add definiert. Ist Add eine
Unterklasse von Frame/JFrame? Dann sollte

```
new Add().setVisible(true)
```
funktionieren.



> leider sagt mir eclipse aber dass das nicht geht



Das glaube ich jetzt weniger: Kann eclipse denn so gut deutsch sprechen?  :bae: 

Im Ernst: Es bringt nichts zu schreiben _das geht nicht,_ was genau ist denn die Fehlermeldung?


----------



## grischan (1. Feb 2006)

> Add.java ist also eine Datei die die Klasse Add definiert. Ist Add eine
> Unterklasse von Frame/JFrame? Dann sollte
> 
> new Add().setVisible(true)
> ...



Das hat leider auch nicht geklappt, auch new Add().setBounds(x,x,x,x) funzt nich

Eclipse gibt die meldung raus : *Add cannot resolved to a type*


----------



## grischan (1. Feb 2006)

Das ist die *Add.java* :


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

public class Add extends Frame implements ActionListener {

	public Add ()  {
		super ("Taube hinzufügen");
		
		Label label1 = new Label ("folgende Taube hinzufügen: ");
		Label labelNr = new Label ("Käfignummer: ");
		Label labelRasse = new Label ("Rasse :");
		Label labelFarbe = new Label ("Farbe: ");
		Label labelZuechter = new Label ("Zuechter: ");
		Label labelPreis = new Label ("Preis: ");
		Label labelEuro = new Label (" €");
		
		TextField textFieldNr = new TextField ();
		TextField textFieldRasse = new TextField ();
		TextField textFieldFarbe = new TextField ();
		TextField textFieldZuechter = new TextField ();
		TextField textFieldPreis = new TextField ();
		
		Button cancel = new Button ("Abbrechen");
		Button ok = new Button ("Taube hinzufügen");
		Button zuechter = new Button ("Züchter suchen...");
		
		setLayout (null);
		setBackground(new Color(192, 192, 192));
				
		label1.setBounds (200, 30, 155, 25);
		add (label1);
		
		labelNr.setBounds (40, 65, 95, 25);
		add (labelNr);
		textFieldNr.setBounds(150, 65, 45, 25);
		add(textFieldNr);
		
		labelRasse.setBounds (40, 100, 95, 25);
		add (labelRasse);
		textFieldRasse.setBounds(150, 100, 245, 25);
		add(textFieldRasse);
		
		labelFarbe.setBounds (40, 135, 95, 25);
		add (labelFarbe);
		textFieldFarbe.setBounds(150, 135, 245, 25);
		add(textFieldFarbe);
		
		labelPreis.setBounds (40, 170, 95, 25);
		add (labelPreis);
		textFieldPreis.setBounds(150, 170, 45, 25);
		add(textFieldPreis);
		labelEuro.setBounds (200, 170, 20, 25);
		add (labelEuro);
		
		labelZuechter.setBounds (40, 205, 95, 25);
		add (labelZuechter);
		textFieldZuechter.setBounds(150, 205, 245, 25);
		add(textFieldZuechter);
		zuechter.setBounds(405, 205, 115, 25);
		add(zuechter);
		
		cancel.setBounds(80, 280, 100, 25);
		add(cancel);
		ok.setBounds(200, 280, 160, 25);
		add(ok);
		cancel.addActionListener(this);
				
		
	}
	public void actionPerformed(ActionEvent event)
	{
		setVisible(false);		
	}
	public static void main(String[] args)
	  {
		Add add = new Add();
	    add.setBounds(100, 100, 600, 350);
	    add.setVisible(true);
	  }
}
```
schon mal danke für die große hilfsbereitschaft


----------



## Leroy42 (1. Feb 2006)

Dann gibt es eben keine _class Add_, oder ist nicht in der Datei Add.java deklariert
und javac findet sie deswegen nicht automatisch oder sie ist in einem anderen package
oder du arbeitest unter **ix und hast Groß/Kleinschreibung nicht beachtet oder...

Oh! Feierabend! Glück gehabt


----------



## grischan (2. Feb 2006)

ich hab die Add.java , die ja die Klasse Add() enthält gepostet, oder muss ich aus der Add.java die *static void main* herausnehmen??

die Add() kann ich ja auch so ausführen, wäre es denn dann nicht eigentlich möglich das der Button die Klasse Add() einfach startet? geht das überhaupt und wie?


----------



## Leroy42 (2. Feb 2006)

grischan hat gesagt.:
			
		

> ich hab die Add.java , die ja die Klasse Add() enthält gepostet, oder muss ich aus der Add.java die *static void main* herausnehmen??



Nein, das hat damit nichts zu tun.



			
				grischan hat gesagt.:
			
		

> die Add() kann ich ja auch so ausführen, wäre es denn dann nicht eigentlich möglich das der Button die Klasse Add() einfach startet? geht das überhaupt und wie?



Eigentlich schon und genau so wie du es versuchst.
Nochmal die Frage ob die beiden Java-Quelltexte in demselben Verzeichnis liegen.

Vielleicht liegt es auch an der Entwicklungsumgebung. Mach doch einfach mal eine
Shell/Konsole auf, wechsle in das Verzeichnis und versuche beide Programme
_zu Fuß_ zu starten.


----------



## Guest (2. Feb 2006)

Die beiden Quelltexte leigen im selben Verzeichnis

merkwürdig, aus einer Shell lassen sich die beiden Programme nun nicht starten aber aus eclipse gehts, auch wenn ich sie zu einer .jar mache laufen die beiden dateien


----------



## Dominicana (3. Feb 2006)

Ich habe das Problem so gelöst:



```
import java.awt.*; 
import java.awt.event.*;
import *****.Add;  // Hier bei den Sternen mußt du deine Package eintragen!!!!!!!!


public class Main_Menu extends Frame implements ActionListener { 
    
   private Button buttonAdd = new Button ("Taube hinzufügen"); 
   private Button buttonClose = new Button ("Schließen"); 
   private Button buttonDelete = new Button ("Taube löschen"); 
   private Button buttonSell = new Button ("Taube verkaufen"); 
   private Button buttonList = new Button ("Liste"); 
   private Button buttonSold = new Button ("verkaufte Tauben"); 
    
   public Main_Menu ()  { 
      super ("Hauptmenü-Taubenverkauf"); 
       
          
      setLayout (null); 
      setBackground(new Color(192, 192, 192)); 
             
      Label label1 = new Label ("Taubenverkauf"); 
      label1.setBounds (40, 30, 155, 25); 
      add (label1); 
       
      this.buttonAdd.setBounds(40, 80, 160, 25); 
      // Das ist neu!!!
      this.buttonAdd.addActionListener(new AddFrameErzeugen());

      this.buttonDelete.setBounds(40, 110, 160, 25); 
      this.add(this.buttonDelete); 
      this.buttonSell.setBounds(40, 140, 160, 25); 
      this.add(this.buttonSell); 
      this.buttonSold.setBounds(40, 170, 160, 25); 
      this.add(this.buttonSold); 
      this.buttonList.setBounds(40, 220, 160, 25); 
      this.add(this.buttonList); 
      this.buttonClose.setBounds(40, 300, 160, 25); 
      this.add(this.buttonClose); 
       
      buttonClose.addActionListener(this); 
      buttonAdd.addActionListener(this); 
             
      } 
    
      public void actionPerformed(ActionEvent event) 
      { 
         Object source = event.getSource (); 
         if (source == this.buttonClose) 
            onClose(); 
         else if (source == this.buttonAdd) 
            onAdd(); 
      } 
      public static void main(String[] args) 
        { 
          Main_Menu menu = new Main_Menu(); 
          menu.setBounds(100, 100, 280, 350); 
          menu.setVisible(true); 
        } 
      private void onClose () { 
         setVisible(false); 
         dispose(); 
         System.exit(0); 
      } 
      private void onAdd () { 
            Frame fenster = new Frame(Add()); 
      } 
       
} 
class AddFrameErzeugen implements ActionListener {
    boolean packFrame = false;
    public void AddFrameErzeugen() {
    }
    public void actionPerformed(ActionEvent event) {
        Add frame = new Add();
        if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }
        frame.setVisible(true);
    }
}
```

Und dann noch deine Add-Klasse! Sollte gehen, jedenfalls bei mir gehts!


----------



## grischan (5. Feb 2006)

danke für die lösung, funktioniert jetzt


----------

