So stellen Sie den Ausgabestream auf TextArea ein

8

Ich versuche, ein GUI-Panel für ein Programm zu erstellen, und ich möchte alles, was normalerweise an meine Eingabeaufforderung gedruckt wird, um ein TextArea-Objekt zu drucken. Ich habe das GUI-Panel zum größten Teil formatiert, aber ich kann den Text nicht zum TextArea drucken, hier ist meine Datei:

%Vor%     
Dan 18.10.2012, 00:43
quelle

4 Antworten

20

Sie müssen den Druckdatenstrom an einen Ausgabestrom umleiten, den Sie steuern können ...

Dies ist ein Beispiel für ein Konzept, das ich für eine Anwendung entwickelt habe, an der ich arbeite. Wir verwenden dies, um die Ausgabekonsole aufzurufen, wenn sie auf Benutzerseiten läuft, damit wir sehen können, was an den Standardausgang gesendet wird ... bis wir unsere Protokollierung behoben haben, nämlich;)

Im Grunde wird ein benutzerdefiniertes OutputStream zwischen den Druckdatenstrom und die Konsole eingefügt, um die Ausgabe zu erfassen. Der Inhalt kann jedoch weiterhin auf die Konsole gedruckt werden. Dies ist hilfreich, wenn Sie das Programm über die Befehlszeile oder die IDE ausführen. Sie könnten einen Schalter stellen, um dies zu stoppen, wenn Sie wollten ...

%Vor%

Aktualisiert mit Arbeitsbeispiel. Testen Sie Windows 7, Java 6 und Mac OS Lion Java 7

    
MadProgrammer 18.10.2012, 01:05
quelle
5

MadProgrammers Lösung ist wirklich großartig, und ich habe mich auf seine gestützt. Wie Loopkin ausführt, behandelt es jedoch keine Sonderzeichen (um genau zu sein, schlägt es bei jedem Nicht-ASCII-Zeichen fehl).

Loopkins Lösung hat für mich nicht funktioniert, aber ich habe schließlich zwei Lösungen gefunden, die diese Aufgabe erfüllt haben.

Lösung 1: behandelt jedes 1-Byte-Zeichen (bis zu U + 00FF)

Diese einfache Lösung behandelt jedes Zeichen bis zu U + 00FF (jedes 1-Byte-Zeichen). Alles ist identisch mit MadProgrammer, außer write() , das wie folgt definiert ist:

%Vor%

Ich habe das Präfixzeug nicht gestellt, weil ich es nicht gebraucht habe.

Lösung 2: behandelt jedes Objekt wie die Standardausgabe

Am Ende habe ich beschlossen, alle Zeichen einzubeziehen, so dass ich direkt PrintStream erweitert habe und auch das Präfix / den Einzug zurückgelegt habe. Das Problem ist, dass ich die private Methode write(String s) nicht überschreiben konnte, also habe ich alle print() -Methoden überschrieben:

%Vor%

Ich habe den Consumer -Aspekt entfernt, um es einfach zu halten, aber alles, was tatsächlich benötigt wird, ist hier. Hier ist, wie ich diese Klasse verwendet habe:

%Vor%     
Joffrey 13.07.2013 02:28
quelle
3

Ich mag die Antwort von MadProgrammer, aber ich denke nicht, dass dies für UTF-8-Zeichen funktionieren würde.

Stattdessen würde ich StreamCapturer ByteArrayOutputStream erweitern und dies als Schreibimplementierung verwenden.

%Vor%

Ich überspringe den Präfixteil, weil ich ihn in meiner Implementierung nicht brauche. Danke für den Code, es war eine große Hilfe!

    
loopkin 18.03.2013 17:41
quelle
0

Nur eine Aktualisierung des ursprünglichen MadProgrammer-Codes für NOOBS - Übergeben eines JTextArea-Parameters an den Konstruktor, z. B.

%Vor%     
Erikas 08.05.2014 22:27
quelle