Fehlermeldung adding a window to a container

  • Themenstarter Themenstarter Jazz914
  • Beginndatum Beginndatum
J

Jazz914

Gast
Hi,
ich bin in meiner Freizeit ein bisschen mit Java am rumexperementieren. Da ich mich kaum auskenne hab ich bis jetzt nur recht einfache Dinge gestrickt, meist dinge die mir auch recht nützlich im Mathe sein können. Dazu gehört auch ein Winkelrechner der mir bestimmte Werte von der kathesischen in die polare Forum (deg, rad etc) umwandelt. Außerdem noch ein rechner für die addition, subtraktion, multiplikation und division von komplexen zahlen. Ich habe dabei z.b. die Panels und die rechnungen extra gelagert und aus einem großen Programm mehrer kleien zu machen. Nun wollte ich aus diesen beiden funktionierenden Programmen (winkel und komplex rechner) eines machen. Habe dazu das main in beiden Hauptprogrammen entfernt und ein einem dritten programm via remov und add aufgerufen. Leider bekomme ich dann folgende Fehlermeldung. Ich bin mir nicht ganz sicher was sie bedeutet oder wie ich diese umgehen kann.

--------------------Configuration: <Default>--------------------
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.checkNotAWindow(Container.java:431)
at java.awt.Container.addImpl(Container.java:1039)
at java.awt.Container.add(Container.java:365)
at Hauptprog_winkel_komplex.<init>(Hauptprog_winkel_komplex.java:53)
at Hauptprog_winkel_komplex.main(Hauptprog_winkel_komplex.java:106)

Process completed.


mfg
 
Zuletzt bearbeitet von einem Moderator:
Ich tippe mal auf ein Fehler in Zeile 53 :bahnhof:
(vllt versuchst du ein JFrame in einen anderen JFrame hinzuzufügen? Aber die wichtigen Teile des Codes könnten ja nicht schaden)
 
Du fügst eine Klasse die igendwie von Window erbt in eine Klasse die irgendwie von Component erbt ein, das scheint niciht zu gehen. Von was leiten deine Panels ab? Zeig mal etwas code
 
Das ist das dritte Programm das beide zusammen fügen soll. komplex_hauptprogramm k1 ist in dem Fall der komplexrechner und winkel_hauptprogramm w1 der Winkelrechner

[Java] import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Hauptprog_winkel_komplex extends JFrame implements ActionListener
{
JRadioButton umrechner, komplex;
ButtonGroup cbg;
komplex_hauptprogramm k1;
winkel_hauptprogramm w1;
JPanel check, center;
JLabel jl;
int checkNR;


public Hauptprog_winkel_komplex()

{

setSize( 800, 500 );
setLayout (new BorderLayout());

check = new JPanel (new GridLayout(3,1));
add(check, BorderLayout.WEST);

jl= new JLabel ("Auswahl");
check.add (jl);

cbg= new ButtonGroup ();
umrechner= new JRadioButton ("Umrechnung", true);
komplex= new JRadioButton ("Komplexe Rechnung",false);
umrechner.addActionListener (this);
komplex.addActionListener (this);
cbg.add(umrechner);
cbg.add(komplex);
check.add(umrechner);
check.add(komplex);

center= new JPanel (new FlowLayout ());
add(center, BorderLayout.CENTER);
w1= new winkel_hauptprogramm ();
center.add (w1);
checkNR= 0;
k1= new komplex_hauptprogramm ();
checkNR= 1;







this.addWindowListener (new WindowAdapter ( )
{
public void windowClosing (WindowEvent e)
{
System.exit (0);
}
} );


setVisible(true);
}

public void actionPerformed(ActionEvent event)
{
if(event.getSource()== umrechner )
{
if(checkNR==0)
{
center.remove (k1);
center.add (w1);
validate ();
checkNR=1;
}
}
if(event.getSource()==komplex)
{
if(checkNR==1)
{
center.remove (w1);
center.add (k1);
validate ();
checkNR=0;
}
}

}

public static void main( String[] args )
{
new Hauptprog_winkel_komplex( );
}
}
[/code]


ps und wo ich hier gerade bei bin, gibts ne Möglichkeit Radiobuttons, ähnlich wie Textfelder zu deaktivieren? Sprich wenn ich auf einer checkbox group etwas aktiviere eine andere cbg zu deaktivieren?
 
Moin,

ps und wo ich hier gerade bei bin, gibts ne Möglichkeit Radiobuttons, ähnlich wie Textfelder zu deaktivieren? Sprich wenn ich auf einer checkbox group etwas aktiviere eine andere cbg zu deaktivieren?

dazu würde mir so spontan erstmal einfallen, alle gewünschten Radiobutton händisch zu aktivieren!
Es gibt aber für eine ButtonGroup auch die Methode CMD "setSelected" ... vgl. API

Gruß
Klaus
 
man kann wie gesagt schlicht ein JFrame nicht in ein anderes einfügen, vielleicht das ContentPane des anderen, aber mit Menü usw. wirds noch komplizierter,
besser die Teilprogramme gleich entsprechend ausrichten, so dass sie Methoden wie getPanel() bereitstellen
 
man kann wie gesagt schlicht ein JFrame nicht in ein anderes einfügen, vielleicht das ContentPane des anderen, aber mit Menü usw. wirds noch komplizierter,
besser die Teilprogramme gleich entsprechend ausrichten, so dass sie Methoden wie getPanel() bereitstellen

ich verstehe gerade nicht genau wo das problem liegt. Ich habe nun die beiden Hauptprogramme so bearbeitet das sie eig wie ein eigenes Teilprogramm funktionieren sollte und diese dann in einem neuen Hauptprogramm aufgerufen. Im prinzip ist dies ja nichts anderes als ich schon vorher bei dem winkelrechner gemacht hab, der bestnad ja auch aus mehreren programmen die ich dann in einem aufgerufen habe.
 
> Ich habe nun die beiden Hauptprogramme so bearbeitet das sie eig wie ein eigenes Teilprogramm funktionieren sollte

für andere unnachprüfbar, ersetze diese blumige Beschreibung doch durch handfeste Erläuterungen oder Code
(falls es noch um die Fehlermeldung aus dem ersten Posting geht)
 
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class winkel_hauptprogramm extends JFrame implements ActionListener
{
		JRadioButton kath, polar, deg, rad;
		ButtonGroup cbg, cbg2;
		komplexpanel2 b1;
		exp2 e1;
		JButton Go;
		JPanel check,check2, button1, center, south;
		JLabel jl;
		int checkNR;


		public winkel_hauptprogramm ()
		{

	    setSize( 600, 130 );
	    setLayout (new BorderLayout());

	    center = new JPanel (new GridLayout(1,3));
	    add(center, BorderLayout.CENTER);



		b1 = new komplexpanel2();
		center.add (b1);
		checkNR = 0;



		cbg = new ButtonGroup ();
		check = new JPanel (new GridLayout(4,1));
		jl = new JLabel (" ");
		check.add (jl);
		kath= new JRadioButton (" -> ", true);

		kath.addActionListener(this);
		polar= new JRadioButton (" <- ", false);
		polar.addActionListener(this);


		check.add(kath);
		check.add(polar);

		center.add(check);

		cbg.add(kath);
		cbg.add(polar);






		Go = new JButton (" GO ");
		check.add (Go);

		Go.addActionListener(this);

		e1 = new exp2 ();
		center.add (e1);
		e1.nowrite ();
		checkNR = 1;

		south = new JPanel (new GridLayout(1,4));
	    add(south, BorderLayout.SOUTH);

		cbg2 = new ButtonGroup ();
		rad= new JRadioButton (" rad", true);

		rad.addActionListener(this);
		deg= new JRadioButton (" deg ", false);
		deg.addActionListener(this);
	    south.add (rad);
	    south.add (deg);
	    cbg2.add (rad);
	    cbg2.add (deg);







		}

		public void actionPerformed(ActionEvent event)
		{
			komplex k1 = new komplex();
			double pol[] = new double[2];
			if(event.getSource()== Go)
			{

				if(kath.isSelected())
				{
					if (rad.isSelected())
					{
					k1= new komplex (b1.lesen ());
					pol[1] = k1.Winkel();
					pol[0] = k1.Betrag();
					e1.schreiben (pol);
					}
					if (deg.isSelected())
					{
					k1= new komplex (b1.lesen ());
					pol[1] = k1.Winkel();
					pol[0] = k1.Betrag();
					pol[1]= k1.radtodeg(pol[1]);
					e1.schreiben (pol);
					}

					
				}

				if(polar.isSelected())
				{
					if (rad.isSelected())
					{
					k1= new komplex (e1.lesen ());
					k1.umrechnen();
					b1.schreiben (k1.getkomplex());
					}
					if (deg.isSelected())
					{
					k1= new komplex (e1.lesen ());
					k1.degtorad();
					k1.umrechnen();
					b1.schreiben (k1.getkomplex());
					}
				}



			}

			if (event.getSource()== kath)
		
			{
					e1.loeschen();
					e1.nowrite();
					b1.write2 ();
					checkNR = 0;
			}

			if( event.getSource()== polar)
					

						{
							b1.loeschen ();
							b1.nowrite2();
							e1.write();
							checkNR= 1;
						}

		}

}


das überarbeitete Winkelhauptprog
 
nun, dann bleibt es beim vorherigen Stand, noch sind es JFrames, und JFrames kann man nicht in andere einfügen,
egal wie sehr das in deinen Augen passend bearbeitet ist und funktionieren sollte

wie gesagt: füge alles in ein JPanel X ein, als Stand-Alone-Programm kommt dieses X in ein eigenes JFrame,
ansonsten X (das Panel, kein JFrame) im größeren Programm als Attribut speichern, einfügen, enfernen usw.
 

Neue Themen


Zurück
Oben