hallo,
ich versuche seit neustem nicht alles in eine Datei zu schreiben und habe jetzt das Problem, dass ich an eine bestimmte Variable nicht drankomme.
das jetabbedpane sowie die beiden jpanels sind in eigenen klassen. die jpanels haben einen konstruktor dem die klasse jtabbedpane übergeben wird. jtabbedpane wird getContentPane() übergeben und die jpanel dem jtabbedpane.
nun möchte ich von der klasse jpanel2 auf die jtextarea von der klasse jpanel1 zugreifen.
das jetabbedpane sowie die beiden jpanels sind in eigenen klassen. die jpanels haben einen konstruktor dem die klasse jtabbedpane übergeben wird. jtabbedpane wird getContentPane() übergeben und die jpanel dem jtabbedpane.
JTabbedPane wird getContentPane() übergeben??? Generell: Ich weiß, am Anfang ist es schwer mit der OOP. Ich habe es am Anfang genauso gemacht. Dennoch ist das ein schlechtes Konstrukt, wenn sich zwei Klassen gegenseitig, und auch noch über irgendwelche Verzweigungen so gut wie alle anderen Klassen kennen.
1.) Die Quick and Dirty Methode: Da sich ohnehin schon alle Klassen über ein paar Beziehungen kennen, kannst du im JTabbedPane (kennen ja beide JPanels) eine Methode getJPanel1() implementieren, mit welcher das JPanel2 an das JPanel1 kommt. JPanel1 hat dann die Methode getJTextArea() welche dann JPanel2 den Zugriff auf die JTextArea in JPanel1 gewährt. Von dieser Methode ist jedoch aus OOP und desgintechnischer Sicht dringends abzuraten, würde aber funktionieren.
2.) Du erklärst erst einmal, warum ein JPanel in einem JTabbedPane überhaupt auf Komponenten in einem anderen JPanel in diesem JTabbedPane zugreifen können sollte. Dann kann man das Programm bestimmt entsprechend sauberer umstrukturieren.
mit der quick and dirty methode komm ich irgentwie nicht an das jetextarea.
Java:
JPanel panel2 = jframe.getpanel2();JScrollPane sp =(JScrollPane)panel2.getComponent(0);// an den jetextarea komm ich so ohne weiteres nicht, sondern nur an den jscrollpane in dem das jtextarea ist.for(Component c : sp.getComponents()){System.out.println(((JTextArea)c).getText());// keines davon ist ein jtextarea}
also es geht um folgendes:
im jtabbedpane ist ein jpanel in dem einstellungen getroffen werden und ein start-button ist.
im zweiten jpanel ist ein Jtextarea mit einem längerer text der formatiert werden soll.
mit einem button auf dem ersten jpanel soll der text auf größe usw. überprüft und irgentwo gespeichert werden.
Aber der Actionlister im ersten JPanel muss dafür den text aus dem jtextarea aus dem zweiten jpanel holen.
ein JScrollPane hat einen komplexen inneren Aufbau aus mehrere Komponenten-Schichten,
du müsstest rekursiv auch die getComponents() der getComponents() anschauen usw.
Ohne jetzt deinegenaue Projektstruktur usw. zu kennen klingt das, als würde sich da eine Methode im "zweiten Panel" anbieten, die package-private ist, und den Text liefert. Alternativ dazu, wenn mit der TextArea was gemacht werden soll, dann kann man auch die zurückgeben, aber man sollte sich möglichst wenig festlegen (wenn man nur Text (String) bekommt, kann man den auch aus einem TextField oder so holen - wenn man sich direkt eine TextArea holt, ist man darauf festgelegt...)