124 lines
2.9 KiB
Java
124 lines
2.9 KiB
Java
|
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)
|
||
|
{
|
||
|
print (0, aMessage);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/** Show the given string at the end of the message area and scroll to make
|
||
|
it visible. Indent the string as requested.
|
||
|
*/
|
||
|
public static synchronized void print (int nIndentation, String aMessage)
|
||
|
{
|
||
|
while (nIndentation-- > 0)
|
||
|
aMessage = " " + 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)
|
||
|
{
|
||
|
println (0, aMessage);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/** Show the given string at the end of the message area and scroll to make
|
||
|
it visible.
|
||
|
*/
|
||
|
public static void println (int nIndentation, String aMessage)
|
||
|
{
|
||
|
print (nIndentation, aMessage+"\n");
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public void paintComponent (Graphics g)
|
||
|
{
|
||
|
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;
|
||
|
}
|