140 lines
4.4 KiB
Java
140 lines
4.4 KiB
Java
/*************************************************************************
|
|
*
|
|
* $RCSfile: MessageArea.java,v $
|
|
*
|
|
* $Revision: 1.3 $
|
|
*
|
|
* last change: $Author: hr $ $Date: 2003-06-30 15:06:53 $
|
|
*
|
|
* The Contents of this file are made available subject to the terms of
|
|
* the BSD license.
|
|
*
|
|
* Copyright (c) 2003 by Sun Microsystems, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of Sun Microsystems, Inc. nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
|
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*************************************************************************/
|
|
|
|
import java.awt.Font;
|
|
import java.awt.Rectangle;
|
|
import java.awt.Color;
|
|
import java.awt.Graphics;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTextArea;
|
|
import javax.swing.JScrollBar;
|
|
|
|
|
|
|
|
/** A message area displays text in a scrollable text widget. It is a
|
|
singleton. Other objects can access it directly to display messages.
|
|
*/
|
|
public class MessageArea
|
|
extends JScrollPane
|
|
{
|
|
public static synchronized MessageArea Instance ()
|
|
{
|
|
if (saInstance == null)
|
|
saInstance = new MessageArea ();
|
|
return saInstance;
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Create a new message area. This method is private because the class is
|
|
a singleton and may therefore not be instanciated from the outside.
|
|
*/
|
|
private MessageArea ()
|
|
{
|
|
maText = new JTextArea();
|
|
maText.setBackground (new Color (255,250,240));
|
|
maText.setFont (new Font ("Helvetica", Font.PLAIN, 9));
|
|
setViewportView (maText);
|
|
setVerticalScrollBarPolicy (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
|
|
setHorizontalScrollBarPolicy (JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
|
|
|
printMessage (
|
|
"class path is " + System.getProperty ("java.class.path") + "\n");
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Show the given string at the end of the message area and scroll to make
|
|
it visible.
|
|
*/
|
|
public static synchronized void print (String aMessage)
|
|
{
|
|
Instance().printMessage(aMessage);
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Show the given string at the end of the message area and scroll to make
|
|
it visible.
|
|
*/
|
|
public static void println (String aMessage)
|
|
{
|
|
Instance().printMessage (aMessage+"\n");
|
|
}
|
|
|
|
|
|
public void paintComponent (Graphics g)
|
|
{
|
|
// Synchronize with the graphics object to prevent paint problems.
|
|
// Remember that this is not done by Swing itself.
|
|
synchronized (g)
|
|
{
|
|
JScrollBar sb = getVerticalScrollBar();
|
|
if (sb != null)
|
|
{
|
|
int nScrollBarValue = sb.getMaximum() - sb.getVisibleAmount() - 1;
|
|
sb.setValue (nScrollBarValue);
|
|
}
|
|
super.paintComponent (g);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Append the given string to the end of the text and scroll so that it
|
|
becomes visible. This is an internal method. Use one of the static
|
|
and public ones.
|
|
*/
|
|
private synchronized void printMessage (String aMessage)
|
|
{
|
|
maText.append (aMessage);
|
|
}
|
|
|
|
|
|
|
|
|
|
private static MessageArea saInstance = null;
|
|
private JTextArea maText;
|
|
}
|