Wie komm ich an die Variable?

Mischka

Aktives Mitglied
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.

aufbau
jtabbedpane
->jpanel1
->->jtextarea
->jpanel2


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.

ich hoffe, dass das problem klar geworden ist.
 
Zuletzt bearbeitet:
hallo,
ich versuche seit neustem nicht alles in eine Datei zu schreiben

Guter Ansatz 🙂 .

und habe jetzt das Problem, dass ich an eine bestimmte Variable nicht drankomme.

Kenn ich auch aus meiner Anfängerzeit 😉 .

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.

nun möchte ich von der klasse jpanel2 auf die jtextarea von der klasse jpanel1 zugreifen.

Es gibt jetzt zwei Möglichkeiten:

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.
 
wäre das denn eine akzeptable lösung?

ich würde gerne eine lösung wählen, die einem möglichst einen lesbaren und leicht verständlichen code nicht im weg stehen.

eine rekursive suche nach einem component steht dem entgegen.

gibt es andere möglichkeiten?
 
Aber der Actionlister im ersten JPanel muss dafür den text aus dem jtextarea aus dem zweiten jpanel holen.

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...)
 
problem gelöst.
ist zwar ein zweizeiler, aber hammer dirty gelöst. naja erstmal reicht es so:
Java:
JPanel sb = g.getSb();
        String sbValue = ((JTextArea) ((JScrollPane) sb.getComponents()[0]).getComponent(0).getComponentAt(100, 100)).getText();
 

Neue Themen


Zurück
Oben