1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * The Contents of this file are made available subject to the terms of 4*cdf0e10cSrcweir * the BSD license. 5*cdf0e10cSrcweir * 6*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 7*cdf0e10cSrcweir * All rights reserved. 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * Redistribution and use in source and binary forms, with or without 10*cdf0e10cSrcweir * modification, are permitted provided that the following conditions 11*cdf0e10cSrcweir * are met: 12*cdf0e10cSrcweir * 1. Redistributions of source code must retain the above copyright 13*cdf0e10cSrcweir * notice, this list of conditions and the following disclaimer. 14*cdf0e10cSrcweir * 2. Redistributions in binary form must reproduce the above copyright 15*cdf0e10cSrcweir * notice, this list of conditions and the following disclaimer in the 16*cdf0e10cSrcweir * documentation and/or other materials provided with the distribution. 17*cdf0e10cSrcweir * 3. Neither the name of Sun Microsystems, Inc. nor the names of its 18*cdf0e10cSrcweir * contributors may be used to endorse or promote products derived 19*cdf0e10cSrcweir * from this software without specific prior written permission. 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22*cdf0e10cSrcweir * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23*cdf0e10cSrcweir * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24*cdf0e10cSrcweir * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25*cdf0e10cSrcweir * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26*cdf0e10cSrcweir * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27*cdf0e10cSrcweir * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 28*cdf0e10cSrcweir * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 29*cdf0e10cSrcweir * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 30*cdf0e10cSrcweir * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 31*cdf0e10cSrcweir * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*cdf0e10cSrcweir * 33*cdf0e10cSrcweir *************************************************************************/ 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir import java.awt.Font; 36*cdf0e10cSrcweir import java.awt.Rectangle; 37*cdf0e10cSrcweir import java.awt.Color; 38*cdf0e10cSrcweir import java.awt.Graphics; 39*cdf0e10cSrcweir import javax.swing.JScrollPane; 40*cdf0e10cSrcweir import javax.swing.JTextArea; 41*cdf0e10cSrcweir import javax.swing.JScrollBar; 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir /** A message area displays text in a scrollable text widget. It is a 46*cdf0e10cSrcweir singleton. Other objects can access it directly to display messages. 47*cdf0e10cSrcweir */ 48*cdf0e10cSrcweir public class MessageArea 49*cdf0e10cSrcweir extends JScrollPane 50*cdf0e10cSrcweir { 51*cdf0e10cSrcweir public static synchronized MessageArea Instance () 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir if (saInstance == null) 54*cdf0e10cSrcweir saInstance = new MessageArea (); 55*cdf0e10cSrcweir return saInstance; 56*cdf0e10cSrcweir } 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir /** Create a new message area. This method is private because the class is 62*cdf0e10cSrcweir a singleton and may therefore not be instanciated from the outside. 63*cdf0e10cSrcweir */ 64*cdf0e10cSrcweir private MessageArea () 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir maText = new JTextArea(); 67*cdf0e10cSrcweir maText.setBackground (new Color (255,250,240)); 68*cdf0e10cSrcweir maText.setFont (new Font ("Helvetica", Font.PLAIN, 9)); 69*cdf0e10cSrcweir setViewportView (maText); 70*cdf0e10cSrcweir setVerticalScrollBarPolicy (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 71*cdf0e10cSrcweir setHorizontalScrollBarPolicy (JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir printMessage ( 74*cdf0e10cSrcweir "class path is " + System.getProperty ("java.class.path") + "\n"); 75*cdf0e10cSrcweir } 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir /** Show the given string at the end of the message area and scroll to make 81*cdf0e10cSrcweir it visible. 82*cdf0e10cSrcweir */ 83*cdf0e10cSrcweir public static synchronized void print (String aMessage) 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir Instance().printMessage(aMessage); 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir /** Show the given string at the end of the message area and scroll to make 92*cdf0e10cSrcweir it visible. 93*cdf0e10cSrcweir */ 94*cdf0e10cSrcweir public static void println (String aMessage) 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir Instance().printMessage (aMessage+"\n"); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir public void paintComponent (Graphics g) 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir // Synchronize with the graphics object to prevent paint problems. 103*cdf0e10cSrcweir // Remember that this is not done by Swing itself. 104*cdf0e10cSrcweir synchronized (g) 105*cdf0e10cSrcweir { 106*cdf0e10cSrcweir JScrollBar sb = getVerticalScrollBar(); 107*cdf0e10cSrcweir if (sb != null) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir int nScrollBarValue = sb.getMaximum() - sb.getVisibleAmount() - 1; 110*cdf0e10cSrcweir sb.setValue (nScrollBarValue); 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir super.paintComponent (g); 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir /** Append the given string to the end of the text and scroll so that it 120*cdf0e10cSrcweir becomes visible. This is an internal method. Use one of the static 121*cdf0e10cSrcweir and public ones. 122*cdf0e10cSrcweir */ 123*cdf0e10cSrcweir private synchronized void printMessage (String aMessage) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir maText.append (aMessage); 126*cdf0e10cSrcweir } 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir private static MessageArea saInstance = null; 132*cdf0e10cSrcweir private JTextArea maText; 133*cdf0e10cSrcweir } 134