// ErrorDialog.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ErrorDialog extends JDialog implements ActionListener
{
   // Displayed regions of the dialog box:
   private JTextArea errorsTextArea;
   private JTextField messageField;

   public ErrorDialog(JFrame owner,
                      String title)
   {
      super(owner, title);

      // Active components to display on window:
      errorsTextArea = new JTextArea();
      errorsTextArea.setEditable(false);
      messageField = new JTextField();
      messageField.setEditable(false);
      JButton closeButton = new JButton("  Close  ");

      // Arrange components on window:
      Container contentPane = getContentPane();
      contentPane.add(new JScrollPane(errorsTextArea),
                      BorderLayout.CENTER);
      JPanel southPanel = new JPanel();
      contentPane.add(southPanel, BorderLayout.SOUTH);
      southPanel.setLayout(new BorderLayout());
      southPanel.add(messageField, BorderLayout.CENTER);
      southPanel.add(closeButton, BorderLayout.EAST);

      // Enable this dialog box to respond to "Close" button:
      closeButton.addActionListener(this);

      // Routine necessities with JDialog windows:
      setSize(600, 200);
      setLocation(200, 470);
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      setVisible(true);
   } // constructor

   public void actionPerformed(ActionEvent e)  { dispose(); }

   public void clear()  { errorsTextArea.setText(""); }

   public void print(String text)  { errorsTextArea.append(text); }

   public void println(String text)
   {
      String lineBreak = System.getProperty("line.separator");
      errorsTextArea.append(text);
      errorsTextArea.append(lineBreak);
   }  // method println

   public void printShortOneLineMessage(String text)
   {
      messageField.setText(text);
   }  // method printShortOneLineMessage
} // class ErrorDialog