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 ).
-
Ganz unten: http://www.tek-tips.com/viewthread.cfm?qid=1530140&page=11
MfG SideWinder
-
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 warumUnd 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!