package com.gvaneyck.util;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.HierarchyBoundsListener;
import java.awt.event.HierarchyEvent;
import java.io.PrintStream;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class ConsoleWindow extends JDialog {
private static final long serialVersionUID = 6067310150468068797L;
StringBuffer data = new StringBuffer();
StringOutputStream sos = new StringOutputStream(data);
private int width = 480;
private int height = 320;
private static final JTextArea txtConsole = new JTextArea();
private static final JScrollPane scrollArea = new JScrollPane(txtConsole);
public static void main(String[] args) {
ConsoleWindow temp = new ConsoleWindow();
while (temp.isVisible()) {
try { Thread.sleep(10); } catch (Exception e) { }
}
System.exit(0);
}
public ConsoleWindow() {
this(0, 0);
}
public ConsoleWindow(int xpos, int ypos) {
redirectOutput();
initWindow(xpos, ypos);
}
private void redirectOutput() {
// Redirect output
System.setOut(new PrintStream(sos));
System.setErr(new PrintStream(sos));
// Start up the thread
Thread t = new Thread() {
String lastData = "";
public void run() {
while (true) {
try {
Thread.sleep(100);
}
catch (InterruptedException e) {}
String tempData = data.toString();
if (!lastData.equals(tempData)) {
lastData = tempData;
txtConsole.setText(lastData);
}
}
}
};
t.setDaemon(true);
t.setName("ConsoleWindow");
t.start();
}
private void initWindow(int xpos, int ypos) {
setTitle("Console");
txtConsole.setEditable(false);
scrollArea.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Container pane = getContentPane();
pane.setLayout(null);
pane.add(scrollArea);
pane.addHierarchyBoundsListener(new HierarchyBoundsListener() {
public void ancestorMoved(HierarchyEvent e) {}
public void ancestorResized(HierarchyEvent e) {
Dimension d = getSize();
width = d.width;
height = d.height;
doMyLayout();
}
});
// Window settings
setSize(width, height);
setLocation(xpos, ypos);
setMinimumSize(new Dimension(width, height));
setVisible(true);
}
public void doMyLayout() {
Insets i = getInsets();
int twidth = width - i.left - i.right;
int theight = height - i.top - i.bottom;
scrollArea.setBounds(5, 5, twidth - 10, theight - 10);
}
}