View Javadoc

1   package ch.odi.justblog.gui.swing;
2   
3   import java.awt.Container;
4   import java.awt.Frame;
5   import java.awt.event.ActionEvent;
6   import java.awt.event.ActionListener;
7   import java.io.PrintWriter;
8   import java.io.StringWriter;
9   
10  import javax.swing.BoxLayout;
11  import javax.swing.JButton;
12  import javax.swing.JDialog;
13  import javax.swing.JLabel;
14  import javax.swing.JScrollPane;
15  import javax.swing.JTextArea;
16  
17  import org.apache.commons.logging.Log;
18  import org.apache.commons.logging.LogFactory;
19  
20  /***
21   * Presents a error message to the user.
22   * The dialog can show a stack trace if the log level for this class
23   * is set to DEBUG.
24   *
25   * @author oglueck
26   */
27  public class ErrorMessage extends JDialog {
28  
29      /***
30       * Creates a modal dialog, showing the exception.
31       * 
32       */
33      public ErrorMessage(Frame owner, Exception ex) {
34          super(owner, true);
35          this.setTitle("Error");
36          Container cp = getContentPane();
37          BoxLayout lo = new BoxLayout(cp, BoxLayout.Y_AXIS);
38          cp.setLayout(lo);
39          cp.add(new JLabel(ex.getMessage()));
40          
41          Log log = LogFactory.getLog(getClass());
42          if (log.isDebugEnabled()) {
43              StringWriter sw = new StringWriter();
44              PrintWriter w = new PrintWriter(sw);
45              ex.printStackTrace(w);
46              w.close();
47              JTextArea text = new JTextArea(sw.toString(), 10, 50);
48              text.setEditable(false);
49              JScrollPane scroll = new JScrollPane(text);
50              cp.add(scroll);
51          }
52          
53          JButton ok = new JButton("ok");
54          ok.setDefaultCapable(true);
55          ok.addActionListener(
56              new ActionListener() {
57                  public void actionPerformed(ActionEvent e) {
58                      ErrorMessage.this.dispose();
59                  }
60              }
61          );
62          cp.add(ok);
63          getRootPane().setDefaultButton(ok);
64          pack();
65          show();
66      }
67  
68  }