auf JTextArea innerhalb eines JPanel zugreifen

Gast #1258578
Lesenswert?

Hallo,

bin in Java eingestiegen und habe mal eine Frage:

Ich habe eine ArrayList angelegt:
private ArrayList<JPanel> sensorBlatt = new ArrayList<JPanel>();



Im Programmverlauf soll ein sensorBlatt angelegt werden und dort 
wiederum eine JTextArea:

sensorBlatt.add(new JPanel());
sensorBlatt.get(0).add(new JTextArea());



Und nun zu meiner Frage: Wie kann ich nun z.B. im späteren 
Programmevrlauf die Größe der JTextArea ändern. Wie spreche ich das Teil 
an?


Gruß
Holger
Persönliche Seite #1258600
Lesenswert?

Am besten indem du eine Klasse Schreibst die JPanel erweitert:
1
import java.awt.FlowLayout;
2
import java.awt.LayoutManager;
3

4
import javax.swing.JPanel;
5
import javax.swing.JTextArea;
6

7

8
public class JSensorPanel extends JPanel {
9
    private static final long serialVersionUID = 1L;
10
    private JTextArea jta;
11

12
    //Alle Konstruktoren von JPanel Übernehmen....
13
    public JSensorPanel() {
14
        this(true);
15
    }
16

17
    public JSensorPanel(LayoutManager layout) {
18
        this(layout, true);
19
    }
20

21
    public JSensorPanel(boolean isDoubleBuffered) {
22
        this(new FlowLayout(), isDoubleBuffered);
23
    }
24

25
    public JSensorPanel(LayoutManager layout, boolean isDoubleBuffered) {
26
        super(layout, isDoubleBuffered);
27
        jta = new JTextArea();
28
    }
29
    
30
    /**
31
     * Gibt die JTextarea zurück
32
     * @return
33
     */
34
    public JTextArea getJTextArea() {
35
        return jta;
36
    }
37
}
1
private ArrayList<JSensorPanel> sensorBlatt = new ArrayList<JSensorPanel>();
2
sensorBlatt.add(new JSensorPanel());
3
sensorBlatt.get(0).getJTextArea().setSize(....);

Ansonsten hat JPanel noch eine Methode *getComponents()* da kannst du 
dann mit instanceof prüfen welche davon JTextAreas sind (ist natürlich 
dan ungünstig wenn es mehrere gibt!)
1
Component[] comp = getComponents();
2
for (Component component : comp) {
3
    if (component instanceof JTextArea) {
4
        JTextArea textArea = (JTextArea)component;
5
        textArea.setSize(400, 500);
6
    }
7
}

Generell sollte man einzelne Module einer GUI nach Funktionen 
untergliedern. Das muß nicht zwangsweise einen Container erweitern, aber 
die größenänderung der JTextArea kannst du auch gleich in die Klasse mit 
einbauen, und du wirst auch irgnewann an den Text ranwollen etc. pp.
Gast #1258672
Lesenswert?

Hallo, danke für die Antwort:

da fehlt aber in der Erweiterung der Klasse noch ein

this.add(jta);

oder?

Ich habe das jetzt mal 1:1 kopiert. Leider funktioniert es nicht. Die 
Größe ändert sich nicht.



Holger
Gast #1258682
Lesenswert?

Mit Swing verwendet man normalerweise Layout-Manager, die die Größe der 
einzelnen Dialog-Komponenten verwalten und bei Änderungen der 
Fenstergröße entsprechend anpassen. Das Setzen einer absoluten Größe von 
Elementen ist zwar prinzipiell möglich, aber unüblich.

Gruß
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren