KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > rice > cs > util > swing > ScrollableDialog


1 /*BEGIN_COPYRIGHT_BLOCK
2  *
3  * This file is part of DrJava. Download the current version of this project from http://www.drjava.org/
4  * or http://sourceforge.net/projects/drjava/
5  *
6  * DrJava Open Source License
7  *
8  * Copyright (C) 2001-2006 JavaPLT group at Rice University (javaplt@rice.edu). All rights reserved.
9  *
10  * Developed by: Java Programming Languages Team, Rice University, http://www.cs.rice.edu/~javaplt/
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
13  * documentation files (the "Software"), to deal with the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
15  * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
16  *
17  * - Redistributions of source code must retain the above copyright notice, this list of conditions and the
18  * following disclaimers.
19  * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
20  * following disclaimers in the documentation and/or other materials provided with the distribution.
21  * - Neither the names of DrJava, the JavaPLT, Rice University, nor the names of its contributors may be used to
22  * endorse or promote products derived from this Software without specific prior written permission.
23  * - Products derived from this software may not be called "DrJava" nor use the term "DrJava" as part of their
24  * names without prior written permission from the JavaPLT group. For permission, write to javaplt@rice.edu.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
27  * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28  * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
29  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30  * WITH THE SOFTWARE.
31  *
32  *END_COPYRIGHT_BLOCK*/

33
34 package edu.rice.cs.util.swing;
35
36 import edu.rice.cs.drjava.ui.MainFrame;
37 import java.awt.*;
38 import java.awt.event.*;
39 import javax.swing.*;
40 import javax.swing.border.*;
41 import java.io.Serializable JavaDoc;
42
43 /**
44  * Manages a JDialog with a scrollable text area and a button panel.
45  * @version $Id: ScrollableDialog.java 4026 2006-10-31 15:50:16Z rcartwright $
46  */

47 public class ScrollableDialog implements Serializable JavaDoc {
48   /** Default width for all ScrollableDialogs. */
49   public static final int DEFAULT_WIDTH = 500;
50   /** Default height for all ScrollableDialogs. */
51   public static final int DEFAULT_HEIGHT = 400;
52   /** JDialog managed by this component. */
53   protected JDialog _dialog;
54   /** JTextArea contained in a scroll pane in this dialog. */
55   protected JTextArea _textArea;
56   /** Panel of buttons at the bottom of this dialog. */
57   protected JPanel _buttonPanel;
58   
59   /**
60    * Creates a new ScrollableDialog with the default width and height.
61    * @param parent Parent frame for this dialog
62    * @param title Title for this dialog
63    * @param header Message to display at the top of this dialog
64    * @param text Text to insert into the scrollable JTextArea
65    */

66   public ScrollableDialog(JFrame parent, String JavaDoc title, String JavaDoc header, String JavaDoc text) {
67     this(parent, title, header, text, DEFAULT_WIDTH, DEFAULT_HEIGHT);
68   }
69   
70   /**
71    * Creates a new ScrollableDialog.
72    * @param parent Parent frame for this dialog
73    * @param title Title for this dialog
74    * @param header Message to display at the top of this dialog
75    * @param text Text to insert into the scrollable JTextArea
76    * @param width Width for this dialog
77    * @param height Height for this dialog
78    */

79   public ScrollableDialog(JFrame parent, String JavaDoc title, String JavaDoc header, String JavaDoc text, int width, int height)
80   {
81     _dialog = new JDialog(parent, title, true);
82     Container content = _dialog.getContentPane();
83
84     content.setLayout(new BorderLayout());
85
86     // Create the text area
87
_textArea = new JTextArea();
88     _textArea.setEditable(false);
89     _textArea.setText(text);
90     
91     // Arrange the dialog
92
_dialog.setSize(width, height);
93     
94     // Add components
95
JScrollPane textScroll =
96       new BorderlessScrollPane(_textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
97                                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
98     JPanel scrollWrapper = new JPanel(new BorderLayout(0,5));
99     scrollWrapper.setBorder(new EmptyBorder(5,5,0,5));
100     scrollWrapper.add(new JLabel(header),BorderLayout.NORTH);
101     scrollWrapper.add(textScroll,BorderLayout.CENTER);
102     JPanel bottomPanel = new JPanel(new BorderLayout());
103     _buttonPanel = new JPanel(new GridLayout(1,0,5,5));
104     bottomPanel.add(_buttonPanel,BorderLayout.EAST);
105     bottomPanel.setBorder(new EmptyBorder(5,5,5,5));
106     _addButtons();
107     
108     content.add(scrollWrapper, BorderLayout.CENTER);
109     content.add(bottomPanel, BorderLayout.SOUTH);
110     
111     // This method is deprecated. There are alternatives, but it is
112
// probably best to let defer to the standard focus-management
113
// policy rather than trying to customize it.
114
//_textArea.requestDefaultFocus();
115
}
116
117   /**
118    * Adds buttons to this dialog's button panel.
119    * Subclasses can override this to add different buttons.
120    */

121   protected void _addButtons() {
122     _buttonPanel.add(new JButton(_okAction));
123   }
124
125   /** A default "OK" action which disposes this dialog when invoked.
126 */

127   private Action _okAction = new AbstractAction("OK") {
128     public void actionPerformed(ActionEvent e) {
129       _dialog.dispose();
130     }
131   };
132
133   /**
134    * Sets the font for the text area in this dialog.
135    * @param f New font for the text
136    */

137   public void setTextFont(Font f) {
138     _textArea.setFont(f);
139   }
140   
141   /** Shows this dialog. */
142   public void show() {
143     MainFrame.setPopupLoc(_dialog, _dialog.getOwner());
144     _dialog.setVisible(true);
145   }
146 }
147
Popular Tags