001: /*
002: * @(#)ResizableDialog.java
003: *
004: * Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
005: */
006: package com.jidesoft.swing;
007:
008: import com.jidesoft.utils.SystemInfo;
009:
010: import javax.swing.*;
011: import javax.swing.border.Border;
012: import java.awt.*;
013: import java.awt.event.ComponentAdapter;
014: import java.awt.event.ComponentEvent;
015:
016: /**
017: * A resizable undecorated dialog.
018: */
019: public class ResizableDialog extends JDialog implements
020: ResizableSupport {
021:
022: private ResizablePanel _resizablePanel;
023:
024: public ResizableDialog() throws HeadlessException {
025: initComponents();
026: }
027:
028: public ResizableDialog(Frame owner) throws HeadlessException {
029: super (owner);
030: initComponents();
031: }
032:
033: public ResizableDialog(Frame owner, boolean modal)
034: throws HeadlessException {
035: super (owner, modal);
036: initComponents();
037: }
038:
039: public ResizableDialog(Frame owner, String title)
040: throws HeadlessException {
041: super (owner, title);
042: initComponents();
043: }
044:
045: public ResizableDialog(Frame owner, String title, boolean modal)
046: throws HeadlessException {
047: super (owner, title, modal);
048: initComponents();
049: }
050:
051: public ResizableDialog(Frame owner, String title, boolean modal,
052: GraphicsConfiguration gc) {
053: super (owner, title, modal, gc);
054: initComponents();
055: }
056:
057: public ResizableDialog(Dialog owner) throws HeadlessException {
058: super (owner);
059: initComponents();
060: }
061:
062: public ResizableDialog(Dialog owner, boolean modal)
063: throws HeadlessException {
064: super (owner, modal);
065: initComponents();
066: }
067:
068: public ResizableDialog(Dialog owner, String title)
069: throws HeadlessException {
070: super (owner, title);
071: initComponents();
072: }
073:
074: public ResizableDialog(Dialog owner, String title, boolean modal)
075: throws HeadlessException {
076: super (owner, title, modal);
077: initComponents();
078: }
079:
080: public ResizableDialog(Dialog owner, String title, boolean modal,
081: GraphicsConfiguration gc) throws HeadlessException {
082: super (owner, title, modal, gc);
083: initComponents();
084: }
085:
086: /**
087: * Initializes the resizable window.
088: */
089: protected void initComponents() {
090: setModal(false);
091: setUndecorated(true);
092:
093: _resizablePanel = new ResizablePanel() {
094: @Override
095: protected Resizable createResizable() {
096: return new Resizable(this ) {
097: @Override
098: public void resizing(int resizeDir, int newX,
099: int newY, int newW, int newH) {
100: Container container = ResizableDialog.this
101: .getContentPane();
102: if (SystemInfo.isJdk15Above()
103: || container instanceof JComponent) {
104: container.setPreferredSize(new Dimension(
105: newW, newH));
106: }
107: if (!JDialog.isDefaultLookAndFeelDecorated()) {
108: ResizableDialog.this .setBounds(newX, newY,
109: newW, newH);
110: }
111: }
112:
113: @Override
114: public boolean isTopLevel() {
115: return true;
116: }
117: };
118: }
119: };
120: setContentPane(_resizablePanel);
121:
122: // make sure the content pane resized along with the window.
123: addComponentListener(new ComponentAdapter() {
124: @Override
125: public void componentResized(ComponentEvent e) {
126: _resizablePanel.setSize(getSize());
127: }
128: });
129: }
130:
131: /**
132: * Sets the border of the resizable window. Do not pass in an empty border. Otherwise
133: * the window won't be resizable.
134: *
135: * @param border the border.
136: */
137: public void setBorder(Border border) {
138: _resizablePanel.setBorder(border);
139: }
140:
141: /**
142: * Gets the border of the resizable window. By default, <code>UIManagerLookup.getBorder("Resizable.resizeBorder")</code>
143: * will be used.
144: *
145: * @return the border.
146: */
147: public Border getBorder() {
148: return _resizablePanel.getBorder();
149: }
150:
151: /**
152: * Gets the underlying Resizable.
153: *
154: * @return the Resizable.
155: */
156: public Resizable getResizable() {
157: return _resizablePanel.getResizable();
158: }
159: }
|