Problem mit JTextArea und append



  • Hallo allerseits 😉
    Ich habe ein Problem mit dem Ausgeben eines Strings in einem JTextArea und zwar habe ich in meiner Klasse ein Objekt vom Typ JTextArea erzeugt und kann in dieser Klasse auch mit append einen Text ausgeben lassen. Demensprechend habe ich eine Methode in der Klasse deklariert die einen String erwartet und diesen dann mit append ausgeben soll. Wenn ich jedoch jetzt ein Objekt meiner Klasse erstellen und über die Methode ausgeben will passiert nichts! Er zeigt werder Warnungen noch sonst was an kann mir einer weiterhelfen?
    Mein Code sieht ca so aus...

    public class WindowApplication extends JFrame {
       ...
       private JTextArea ta = new JTextArea();
       Verwaltung test = new Verwaltung();
       ...
    
       WindowApplication(){
       }
       WindowApplication(String title){
          super(title);
          setObjekt();
       }
    
       public void setObjekt(){
    
          ta..setEditable(false);
          ta.setLineWrap(true);
          ta.setWrapStyleWord(true);
    
          ta.setBounds(5, 5, 480, 250);
          this.getContentPane().add(ta);
          this.pack();
       }
    
       public void ausgabe(String nachricht){
          ta.append(nachricht);
       }
    }
    
    public class Verwaltung {
       Verwaltung(){
          WindowApplication wa = new WindowApplication();
          wa.ausgabe("TEST");
       }
    }
    


  • Wie wäre es mit einem repaint() nach dem append? Das könnte funktionieren, bin mir aber nicht sicher.

    Btw:
    Wenn ich mich richtig erinnere, dann sollte man pack() in Swing nicht verwenden. Nimm setVisible( true ).





  • icarus2 schrieb:

    Wie wäre es mit einem repaint() nach dem append?

    nicht nötig

    Wenn ich mich richtig erinnere, dann sollte man pack() in Swing nicht verwenden. Nimm setVisible( true ).

    Falsch, ein setVisible(true) fehlt aber trotzdem.

    SideWinder schrieb:

    Ganz unten: http://www.tek-tips.com/viewthread.cfm?qid=1530140&page=11

    Was hat der Post da mit dem Problem hier zu tun? Nichts.

    Als erstes würde ich mal die Endlosschleife aus dem Code entfernen...
    Und beim nächsten mal eine main Methode erstellen damit man das Problem nachvollziehen kann.



  • Ich weiß das der Code nicht läuft hab den nur kurz getippt.
    Mir gehts eigentlich nur darum das ich keine Ausgabe auf einem JTextArea von einer anderen Klasse über eine Methode machen kann aber ich weiß nicht warum



  • Andyman schrieb:

    Ich weiß das der Code nicht läuft hab den nur kurz getippt.
    Mir gehts eigentlich nur darum das ich keine Ausgabe auf einem JTextArea von einer anderen Klasse über eine Methode machen kann aber ich weiß nicht warum

    Und wie soll dir jemand helfen ohne den "echten" Code...? Rumraten oder hellsehen?



  • Ich habe hier alles auf das Wichtigste gekürzt. Die Objektnamen sind vielleicht etwas ungünstig gewählt

    //MAIN
    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
    
    public class Main {
       public static void main(String argv[]) throws IOException {
          //Grafische Oberfläche wird durch Konstruktor erzeugt
          WindowApplication window = new WindowApplication("TEST");
          //Fenstergröße wird gesetzt
          window.setBounds(0, 0, 500, 500);
          //Grafische Oberfläche wird gestartet
          window.show();
       }
    }
    
    //WindowApplication
    import java.awt.event.*;
    import java.awt.*;
    import java.text.NumberFormat;
    import javax.swing.*;
    import java.net.*;
    import java.io.*;
    
    public class WindowApplication extends JFrame {
       private JTextArea ausgabe = new JTextArea();
       private JScrollPane ausgabe_scroll = new JScrollPane(ausgabe);
       private JPanel ausgabe_panel = new JPanel(new BorderLayout());
    
       public WindowApplication(){}
       public WindowApplication(String title) {
          //Fensternamen festlegen
          super(title);
          //Legt die Objekte auf das Layout
          this.getContentPane().setLayout(null);
          //Objekte werden instanziert und Positionen werden festgelegt
          this.SetObject();
          //Reagiert bei folgenden WindowEvents
          this.addWindowListener(new WindowListener() {
             //Wenn das Fenster geschlossen wurde
             public void windowClosed(WindowEvent arg0) {
             }
             //Wenn das Fenster aktiviert wurde
             public void windowActivated(WindowEvent e) {
             }
             //Wenn das Fenster geschlossen wird
             public void windowClosing(WindowEvent e) {
                System.exit(0);
             }
             //Wenn das Fenster minimiert wurde
             public void windowDeactivated(WindowEvent e) {
             }
    
             public void windowDeiconified(WindowEvent e) {
             }
    
             public void windowIconified(WindowEvent e) {
             }
             //Wenn das Fenster gestartet wurde
             public void windowOpened(WindowEvent e) {
             }
          });
       }
    
       public void SetObject() {
          Schreibe ausgabeTA = new Schreibe();
    
          ausgabe.setEditable(false);
          ausgabe.setLineWrap(true);
          ausgabe.setWrapStyleWord(true);  
          ausgabe_panel.setBounds(5, 5, 480, 250);;
          ausgabe_panel.add(ausgabe_scroll);
    
          this.getContentPane().add(ausgabe_panel);;
          this.getContentPane().setBackground(Color.RED);
    
          this.pack();
          this.setVisible(true);
       }
    
       public void ausgeben(String nachricht){
          ausgabe.append(nachricht);
       }
    }
    
    //Schreibe
    public class Schreibe {
       private WindowApplication wa;
    
       Schreibe(){
          wa = new WindowApplication();
          wa.ausgeben("TEST");
       }
    }
    


  • Du machst wa nie sichtbar, wo soll ausgegeben werden? Auf dein sichtbares Fenster wird auch nie was ausgegeben.



  • Ah jetzt verstehe ich das. Es werden 2 TextArea erzeugt ist ja auch eigentlich logisch. Ich möchte eigentlich auf das sichtbare TextArea den Text schreiben also kein neues Objekt erzeugen.
    Tut mir leid bin recht neu in der GUI Programmierung.



  • Ich habs hinbekommen. Ich habe einfach eine neue Klasse erstellt und als Parameter das im WindowApplication erzeugte JTextArea mitgegeben.
    Danke für deine Hilfe! 🙂


Anmelden zum Antworten