blob: 74eb946117ea7cb67ae4424bc2f3046932cf3cfa [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
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;
}