mikrocontroller.net

Forum: PC-Programmierung auf JTextArea innerhalb eines JPanel zugreifen


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten indem du eine Klasse Schreibst die JPanel erweitert:
import java.awt.FlowLayout;
import java.awt.LayoutManager;

import javax.swing.JPanel;
import javax.swing.JTextArea;


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

    //Alle Konstruktoren von JPanel Übernehmen....
    public JSensorPanel() {
        this(true);
    }

    public JSensorPanel(LayoutManager layout) {
        this(layout, true);
    }

    public JSensorPanel(boolean isDoubleBuffered) {
        this(new FlowLayout(), isDoubleBuffered);
    }

    public JSensorPanel(LayoutManager layout, boolean isDoubleBuffered) {
        super(layout, isDoubleBuffered);
        jta = new JTextArea();
    }
    
    /**
     * Gibt die JTextarea zurück
     * @return
     */
    public JTextArea getJTextArea() {
        return jta;
    }
}
private ArrayList<JSensorPanel> sensorBlatt = new ArrayList<JSensorPanel>();
sensorBlatt.add(new JSensorPanel());
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!)
Component[] comp = getComponents();
for (Component component : comp) {
    if (component instanceof JTextArea) {
        JTextArea textArea = (JTextArea)component;
        textArea.setSize(400, 500);
    }
}

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.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooo, alles OK. Das this.add(jta) musste bei mir rein.

Holger

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schrieb:
> Sooo, alles OK. Das this.add(jta) musste bei mir rein.
>
> Holger
Ja sorry hatte ich wohl übersehen. War jezt auch nur so hingauhauen um 
das Prinzip zu verdeutlichen, wie gesagt lieber das ganze vernünftig mit 
Layoutmanager machen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.