Download: jar file
If we use System.out.println(...) in a console
program, the output appears in the console window. To run this
program as an applet or a windows application, the output needs to go
to a GUI component, such as a JTextArea.
The easiest way is to subclass OutputStream
and override just the methods needed to get characters
copied into the JTextArea.
We choose to subclass PrintSream and override methods
println(String) and print(String), along
with several other similar methods. Then we could write to an instance
of the subclass and have the output go directly to the JTextArea. We
could also redirect System.out using the
System.setOut method.
The jar file was generated by
jar cef TextDemo TextDemo.jar *.java *.class
void run()
{
System.setOut(out);
System.out.println("Hello, World!");
for (int i=1; i<=10; i++) System.out.printf("%d\n",i);
System.out.println("Goodbye, all");
}
}
TextDemo.java01: import java.io.*;
02: import java.net.*;
03: import java.awt.EventQueue;
04: import javax.swing.*;
05:
06:
07: class Process {
08: JTextArea area;
09: TextAreaPrintStream out;
10:
11: Process()
12: {
13: area = new JTextArea(9,25);
14: out = new TextAreaPrintStream(area,System.out);
15: }
16:
17: void run()
18: {
19: out.println("Hello, World!");
20: for (int i=1; i<=10; i++) out.printf("%d\n",i);
21: out.println("Goodbye, all");
22: }
23: }
24:
25: public class TextDemo extends JApplet {
26:
27: public void init()
28: {
29: EventQueue.invokeLater(new Runnable() {
30: public void run()
31: {
32: Process proc = new Process();
33: add(new JScrollPane(proc.area));
34: proc.run();
35: }
36: });
37: }
38:
39: public static void main(String[] args)
40: {
41: String filename;
42:
43: final Process proc = new Process();
44:
45: EventQueue.invokeLater(new Runnable() {
46: public void run()
47: {
48: JFrame frame = new JFrame("TextAreaPrintStream Demo");
49: frame.add(new JScrollPane(proc.area));
50: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
51: frame.pack();
52: //frame.setSize(640,200);
53: frame.setVisible(true);
54: proc.run();
55: }
56: });
57: }
58: }
TextAreaPrintStream.java01: /**
02: * Class TextAreaPrintStream
03: * extends PrintStream.
04: * A custom made PrintStream which overrides methods println(String)
05: * and print(String).
06: * Thus, when the out stream is set as this PrintStream (with System.setOut
07: * method), all calls to System.out.println(String) or System.out.print(String)
08: * will result in an output stream of characters in the JTextArea given as an
09: * argument of the constructor of the class.
10: **/
11:
12: import java.io.*;
13: import javax.swing.*;
14:
15: public class TextAreaPrintStream extends PrintStream {
16:
17: //The JTextArea to wich the output stream will be redirected.
18: private JTextArea textArea;
19:
20:
21: /**
22: * Method TextAreaPrintStream
23: * The constructor of the class.
24: * @param the JTextArea to wich the output stream will be redirected.
25: * @param a standard output stream (needed by super method)
26: **/
27: public TextAreaPrintStream(JTextArea area, OutputStream out) {
28: super(out);
29: textArea = area;
30: }
31:
32: /**
33: * Method println
34: * @param the String to be output in the JTextArea textArea (private
35: * attribute of the class).
36: * After having printed such a String, prints a new line.
37: **/
38: public void println(String string) {
39: textArea.append(string+"\n");
40: }
41:
42: public void println() {
43: textArea.append("\n");
44: }
45:
46: public void println(Object obj) {
47: textArea.append(obj.toString()+"\n");
48: }
49:
50:
51:
52: /**
53: * Method print
54: * @param the String to be output in the JTextArea textArea (private
55: * attribute of the class).
56: **/
57: public void print(String string) {
58: textArea.append(string);
59: }
60:
61: public void print(Object obj) {
62: textArea.append(obj.toString());
63: }
64: }
Maintained by John Loomis, updated Wed Mar 26 14:25:19 2008