IllegalArgumentException

Status
Nicht offen für weitere Antworten.

JavaIsToll

Mitglied
Hallo,
ich habe ein Interface wo ich dynamisch mehrere Tabs in einem Frame erstellen muss. Somit habe ich jetzt die Tab Erzeugung von der JFrame erzeugung getrennt und seitdem tritt die IllegalArgumentException auf.
Die eine Klasse(Name: Control) sieht so aus:

public Control(){
f = new JFrame();
Container c = f.getContentPane();
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize(600, 750);
f.setTitle("Persona");
f.add(c);
JTabbedPane tabs = new JTabbedPane();
new Tab(this,"1");
new Tab(this,"2");


f.add(tabs, BorderLayout.CENTER);
tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}
Die Klasse(Name: Tab) wo der Tab erzeugt wird sieht folgendermaßen aus:

Control ctrl;
public Tab(Control ctrl, String tname) {
this.ctrl = ctrl;
Container c = ctrl.f.getContentPane();

ctrl.tabs.addTab(tname, c);

main = new JPanel();
main.setLayout(new GridLayout(9,1));
c.add(main);
main.setLocation(0, 100);
main.add(new JLabel("here is the photograph supposed to be"));
}

Der Fehler tritt auf in der Control Klasse, Zeile: 'f.add(tabs, BorderLayout.CENTER);' mit der Erklärung "adding container's parent to itself". Ich versteht nicht ganz was man mir damit sagen möchte, geschweige denn wie ich es lösen kann.
Es wär super nett von euch wenn mir jemand bei der Lösung des Problems helfen könnte.
Vielen Dank
ciao Sebastian
 
S

SlaterB

Gast
ein JFrame hat ein ContentPane,
alle Aufrufe
jFrame.add() werden weitergeleitet an jFrame.getContentPane().add()

du willst mit
> f.add(tabs, BorderLayout.CENTER);
tabs ins ContentPane einfügen,
oder tust es zumindest ohne es zu wissen,

vorher hast du aber schon das ContentPane in tabs eingefügt:
> Container c = ctrl.f.getContentPane();
> ctrl.tabs.addTab(tname, c);

also hast du einen Kreis, ContentPane enthält Tabs, Tabs enthält ContentPane usw

------

allerdings verstehe ich kaum, dass es überhaupt dazu kommt

> ctrl.tabs.addTab(tname, c);
deutet auf ein Klassenattribut tabs in Control hin,
mit
> JTabbedPane tabs = new JTabbedPane();
legst du im Konstruktor von Control aber eine lokale Variable an, gibt es auch ein Klassenattribut?

der Aufruf weiter oben ist besser:
> f = new JFrame();

mit
JFrame f = new JFrame();
würde stattdessen wiederum nur eine lokale Variable angelegt werden, das Klassenattribut f null bleiben
 

JavaIsToll

Mitglied
ok. vielen dank für deine Erläuterung. Ja den Kreis hab ich tatsächlich nicht bemerkt.
Also ist dein Vorschlag 'f.add(tabs, BorderLayout.CENTER);' zu löschen!?, allerdings muss ich ja irgendwo tabs zum Frame hinzufügen.

>JTabbedPane tabs = new JTabbedPane();
ja, dass ist evtl. etwas undeutig hier im Forum rübergekommen, Ich habe ein Klassenvariable tabs und an der Stelle im Quellcode weise ich es eigtl nur zu, also eigtl sieht die Zeile so aus:
> tabs = new JTabbedPane();
dachte nur das es evtl. unklar ist von welchem Typ die Variable ist, sollte es aber nicht sein........

So wie würdest du das Problem beheben?
Danke!
 
S

SlaterB

Gast
ein JFrame braucht ein ContentPane und darin willst du anscheinend unbedingt die Tabs haben,

dann ist eher die andere Anweisung, ContentPane in Tabs rein fraglich,
warum das? tut es nicht ein neues JPanel genauso?

> ctrl.tabs.addTab(tname, c);
> main = new JPanel();
> main.setLayout(new GridLayout(9,1));
> c.add(main);

->

main = new JPanel();
main.setLayout(new GridLayout(9,1));
ctrl.tabs.addTab(tname, main);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben