Textarea aktualisieren, Referenz fehlt

Status
Nicht offen für weitere Antworten.
P

patrick1982a

Gast
Hallo Leute,

ich möchte eine TextArea aktualisieren, weiss aber nicht, wie ich eine Referenz auf diese herstelle.
Mein Programm hat folgenden Aufbau:


textareaproblem.jpg


Ich möchte gerne die textArea1 aktualisieren, leider fehlt mir in TestSubClass die Referenz zu TestWindow.
Natürlich könnte ich die Referenz von TestWindow an den TestActionListener und dann an TestSubClass als Parameter mitgeben, aber wie macht man so was professionell? Mit Interfaces?

Für ein professionelles und funktionierendes Beispiel wäre ich sehr dankbar.

Viele Grüße

Patrick

Code:
//TestWindow.java

public class TestWindow extends Frame{

  private static final long serialVersionUID = 1L;

  public TestWindow(){
    FlowLayout flowLayout=new FlowLayout();
    TestActionListener actionListener = new TestActionListener();
    setLayout(flowLayout);
    Button but1=new Button("MeinButton");
    but1.addActionListener(actionListener);
    TextArea textarea1 = new TextArea();
    add(but1);
    add(textarea1);
  }
  
  public static void main (String args[]){
      TestWindow windowTest = new TestWindow();
      windowTest.setVisible(true);
      windowTest.setSize(300, 300);
  }
}

Code:
//TestActionListener.java

public class TestActionListener implements ActionListener{

  @Override
  public void actionPerformed(ActionEvent actionEvent) {
    if(actionEvent.getActionCommand()=="MeinButton"){
      TestSubClass subKlasse = new TestSubClass();
      subKlasse.doSomeThing();
    }
    
  }
}

Code:
//TestSubClass.java
public class TestSubClass{
  public void doSomeThing() {
    System.out.println("Das ist die Ausgabe, die ins Textfeld soll");
  }
}
 

André Uhres

Top Contributor
Gewöhnlich lösen wir sowas mit dem MVC Konzept. Etwa so:
Code:
/*
 * TestWindow.java
 * = View
 */
import java.awt.*;
import javax.swing.*;

public class TestWindow extends JFrame {

    private static final long serialVersionUID = 1L;
    private TestActionListener controller;
    private JToolBar toolbar;
    private JTextArea textarea1;

    public TestWindow() {
        super("TestWindow");
    }

    public void createAndShowGUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
        setLocationRelativeTo(null);
        JButton but1 = new JButton("MeinButton");
        but1.addActionListener(controller);
        textarea1 = new JTextArea();
        toolbar = new JToolBar();
        toolbar.add(but1);
        add(toolbar, BorderLayout.NORTH);
        add(new JScrollPane(textarea1), BorderLayout.CENTER);
        setVisible(true);
    }

    public void setController(TestActionListener controller) {
        this.controller = controller;
    }

    public void updateGui(String str) {
        textarea1.append(str + "\n");
    }
}
Code:
/*
 * TestActionListener.java
 * = Controller
 */

import java.awt.event.*;

public class TestActionListener implements ActionListener {

    private TestSubClass model;
    private TestWindow view;

    public TestActionListener(TestSubClass model, TestWindow view) {
        this.model = model;
        this.view = view;
    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        if (actionEvent.getActionCommand().equals("MeinButton")) {
            model.doSomeThing();
            view.updateGui(model.getText());
        }

    }
}
Code:
/*
 * TestSubClass.java
 * = Model
 */

public class TestSubClass {

    private String text;

    public void doSomeThing() {
        text = "Das ist die Ausgabe, die ins Textfeld soll";
    }

    public String getText() {
        return text;
    }
}
Code:
import javax.swing.*;

public final class Main {

    private TestSubClass model;
    private TestWindow view;
    private TestActionListener controller;

    public Main() {
        model = new TestSubClass();
        view = new TestWindow();
        controller = new TestActionListener(model, view);
        view.setController(controller);
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Main().view.createAndShowGUI();
            }
        });
    }
}

Zusammenfassung:
Wir machen eine Modelklasse für die Daten,
eine Viewklasse für die Guikomponenten,
eine Controllerklasse für die Listener und eine Klasse "Main"
um die drei zu instanzieren. Da diese auch miteinander sprechen
müssen, sorgt "Main" ebenfalls für die nötigen Bekanntschaften,
z.B.: view.setController(controller).
 
P

patrick1982a

Gast
Hallo Andre,

vielen Dank für deine sehr professionelle und ausführliche Antwort, du hast mir sehr geholfen :)
Was wäre denn, wenn ich das Model in einem eigenen Thread laufen lassen würde?
Wie kann ich dem Thread, welcher die Methode getOutputText() besitzt, in regelmäßigen Abständen eine Ausgabe entlocken?
Code:
if(actionEvent.getActionCommand()=="start"){
    xmlProcessor.setLoadedReferenceFile(getLoadedReferenceFile());
    xmlProcessor.setLoadedSourceFile(getLoadedSourceFile());
    xmlProcessorThread = new Thread(xmlProcessor);
    xmlProcessorThread.start();
}
 

André Uhres

Top Contributor
Wir können eine neue Controllerfunktion einbauen
und der Thread ruft diese Funktion auf, sobald er eine Ausgabe wünscht.
In der neuen Funktion können wir das Model und die View anpassen
(ähnlich wie wir es für "MeinButton" gemacht haben).
 
P

patrick1982a

Gast
Man merkt schon, dass du ein professioneller Programmierer bist :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Textarea aktualisieren Java Basics - Anfänger-Themen 2
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
J Buchstaben aus textArea extrahieren Java Basics - Anfänger-Themen 4
O ScrollPane, TextArea Java Basics - Anfänger-Themen 1
J Ärger mit TextArea und Linesep. Java Basics - Anfänger-Themen 3
T Java FX TextArea Java Basics - Anfänger-Themen 3
M TextArea scrollbar bei editable false Java Basics - Anfänger-Themen 5
D JScrollPane mit TextArea Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
T Klassen JTextArea und TextArea Java Basics - Anfänger-Themen 8
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
fLooojava Output in einer Textarea einfärben Java Basics - Anfänger-Themen 7
S import java.*; vs import java.awt.TextArea Java Basics - Anfänger-Themen 7
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
F TextArea auslesen und in Datei speichern Java Basics - Anfänger-Themen 4
G textarea action Java Basics - Anfänger-Themen 5
F Erste Schritte String von anderer Klasse auf TextArea von erster Klasse Java Basics - Anfänger-Themen 12
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
M TextArea hält Zeilengrenze nicht ein Java Basics - Anfänger-Themen 4
M Textarea auslesen Java Basics - Anfänger-Themen 6
H Input/Output Inhalt einer TextArea in Hex umwandeln Java Basics - Anfänger-Themen 10
P Textarea auslesen Java Basics - Anfänger-Themen 18
R Array in Textarea ausgeben Java Basics - Anfänger-Themen 3
Binary.Coder Bruch in Textarea Java Basics - Anfänger-Themen 5
0 String farbig in TextArea Java Basics - Anfänger-Themen 10
A TextArea und ScrollBar Java Basics - Anfänger-Themen 17
B ArrayList zu TextArea Java Basics - Anfänger-Themen 5
N leere JTextArea wird nicht angezeigt - TextArea aber schon? Java Basics - Anfänger-Themen 5
G Text aus TextArea in Zwischenablage kopieren Java Basics - Anfänger-Themen 6
S Texteingabe in Textarea sperren? Java Basics - Anfänger-Themen 3
M Scrollbar zu Textarea Java Basics - Anfänger-Themen 5
Luk10 TextArea und Konsole ... Java Basics - Anfänger-Themen 3
C ArrayList In textarea ausgeben Java Basics - Anfänger-Themen 3
D TextArea clearen mit setText("") ? Java Basics - Anfänger-Themen 21
K In TextArea ausgeben ? Java Basics - Anfänger-Themen 4
M im Programm TextArea hinzufügen Java Basics - Anfänger-Themen 2
K Txt statt in TextArea in JTable einlesen und bearbeiten können Java Basics - Anfänger-Themen 4
S String repräsentation eines XML-Files für Textarea formatieren. Java Basics - Anfänger-Themen 2
Z Text aus externer Datei in TextArea einlesen Java Basics - Anfänger-Themen 5
Z TextArea Größe festlegen Java Basics - Anfänger-Themen 22
S Zeilenumbruch awt.textarea Java Basics - Anfänger-Themen 16
D Problem beim auslesen von TextArea Java Basics - Anfänger-Themen 3
J Multithreading mit einer TextArea Java Basics - Anfänger-Themen 29
S Konsole auf Textarea Java Basics - Anfänger-Themen 7
N String vom InputStream in TextArea übertragen Java Basics - Anfänger-Themen 6
E Probleme mit setText() bzw. append() bei TextArea Java Basics - Anfänger-Themen 13
D Probleme mit TextArea und Textfield Java Basics - Anfänger-Themen 27
M Scrollpane an Textarea anhängen Java Basics - Anfänger-Themen 3
W TextArea Probleme Java Basics - Anfänger-Themen 3
M String in textarea übernehmen klappt nicht Java Basics - Anfänger-Themen 13
P TextArea Problem Java Basics - Anfänger-Themen 8
G TextArea - Strings farbig Java Basics - Anfänger-Themen 2
D Button im Bezug auf TextArea Java Basics - Anfänger-Themen 17
Q TextArea - wie mache ich einen Absatz? Java Basics - Anfänger-Themen 9
P aus Textarea bestimmte Zeile auslesen Java Basics - Anfänger-Themen 3
J Textarea (zeichen) in Zahlen umwandeln Java Basics - Anfänger-Themen 5
R Variable in Textarea auslesen Java Basics - Anfänger-Themen 7
G Bild hinter TextArea Java Basics - Anfänger-Themen 2
G Automatischer Zeilenumbruch bei einer TextArea Java Basics - Anfänger-Themen 16
D textarea in einer JSP Java Basics - Anfänger-Themen 3
M Inhalt einer TextArea in die Zwischenablage kopieren Java Basics - Anfänger-Themen 2
L Textformatierung ist TextArea Java Basics - Anfänger-Themen 7
N In der Textarea an einer bestimmten Positon weiterschreiben? Java Basics - Anfänger-Themen 6
L Strings von Datei lesen und in TextArea schieben Java Basics - Anfänger-Themen 3
7 TextArea Java Basics - Anfänger-Themen 3
O Konsolenausgabe auf TextArea umleiten Java Basics - Anfänger-Themen 4
C HTML in TextArea deaktivieren. Java Basics - Anfänger-Themen 2
V TextArea einlesen, zeichen verändern, ausgeben! Java Basics - Anfänger-Themen 2
U Cursorposition in Textarea rausfinden Java Basics - Anfänger-Themen 7
R in einer TextArea den Cursor gleich anzeigen lassen Java Basics - Anfänger-Themen 3
G wieso ist die TextArea im Fenster nicht sichtbar Java Basics - Anfänger-Themen 3
N Teilweiseausgabe eines Vectors in eine TextArea Java Basics - Anfänger-Themen 21
B Größe der Textarea Java Basics - Anfänger-Themen 3
N Inhalt einer TextArea überschreiben Java Basics - Anfänger-Themen 4
N Wert aus Coice auslesen und in textarea einfügen Java Basics - Anfänger-Themen 23
M JDialog mit TextArea Java Basics - Anfänger-Themen 2
J TextArea auf Anfang setzen Java Basics - Anfänger-Themen 3
L Frage zu TextArea! Java Basics - Anfänger-Themen 16
J Progressbar aktualisieren Java Basics - Anfänger-Themen 17
C Timer aktualisieren Java Basics - Anfänger-Themen 5
TimoN11 Array mit unterschiedlichen längen aktualisieren, dann als Methodenwert einsetzen Java Basics - Anfänger-Themen 1
J Java FX - Label aktualisieren Java Basics - Anfänger-Themen 1
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
P WindowBuilder aktualisieren Java Basics - Anfänger-Themen 0
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
F Problem bei ImageIcon aktualisieren Java Basics - Anfänger-Themen 5
MrSnake Tabelleninhalt aktualisieren Java Basics - Anfänger-Themen 12
R Programm aktualisieren/refreshen Java Basics - Anfänger-Themen 7
2 Uhrzeit und Datum aktualisieren Java Basics - Anfänger-Themen 12
M Methoden Methoden aktualisieren Java Basics - Anfänger-Themen 2
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
G Input/Output Webseite Cache-Control: max-age=3 Öfters Aktualisieren? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben