/* * Copyright (C) 2010 Peransin Nicolas. All rights reserved. * Use is subject to license terms. */ package org.mypsycho.swing.app.utils; import java.awt.Color; import java.awt.event.HierarchyEvent; import java.awt.event.HierarchyListener; import java.io.PrintStream; import javax.swing.JTextPane; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; import org.mypsycho.swing.TextPaneStream; /** * Class for ... * <p>Details</p> * * @author Peransin Nicolas */ @SuppressWarnings("serial") public class SystemTextPane extends JTextPane { PrintStream oldStd = null; PrintStream oldErr = null; public SystemTextPane() { System.setOut(createStream("std", Color.BLUE)); System.setErr(createStream("err", Color.RED)); setEditable(false); addHierarchyListener(new HierarchyListener() { @Override public void hierarchyChanged(HierarchyEvent e) { if (isDisplayable()) { if (oldStd == null) { oldStd = System.out; System.setOut(createStream("std", Color.BLUE)); } if (oldErr == null) { oldErr = System.err; System.setErr(createStream("err", Color.RED)); } } else { if (oldStd != null) { System.setOut(oldStd); oldStd = null; } if (oldErr != null) { System.setErr(oldErr); oldErr = null; } } } }); } TextPaneStream createStream(String name, Color c) { StyledDocument doc = getStyledDocument(); Style def = doc.getStyle(StyleContext.DEFAULT_STYLE); Style stdStyle = getStyledDocument().addStyle(name, def); StyleConstants.setForeground(stdStyle, c); return new TextPaneStream(this, TextPaneStream.DEFAULT_MAX, name); } }