001: /*
002: * @(#)ResizableFrame.java 10/22/2005
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 frame.
018: */
019: public class ResizableFrame extends JFrame implements ResizableSupport {
020:
021: private ResizablePanel _resizablePanel;
022:
023: public ResizableFrame() throws HeadlessException {
024: initComponents();
025: }
026:
027: public ResizableFrame(GraphicsConfiguration gc) {
028: super (gc);
029: initComponents();
030: }
031:
032: public ResizableFrame(String title) throws HeadlessException {
033: super (title);
034: initComponents();
035: }
036:
037: public ResizableFrame(String title, GraphicsConfiguration gc) {
038: super (title, gc);
039: initComponents();
040: }
041:
042: /**
043: * Initializes the resizable window.
044: */
045: protected void initComponents() {
046: setUndecorated(true);
047:
048: _resizablePanel = new ResizablePanel() {
049: @Override
050: protected Resizable createResizable() {
051: return new Resizable(this ) {
052: @Override
053: public void resizing(int resizeDir, int newX,
054: int newY, int newW, int newH) {
055: Container container = ResizableFrame.this
056: .getContentPane();
057: if (SystemInfo.isJdk15Above()
058: || container instanceof JComponent) {
059: container.setPreferredSize(new Dimension(
060: newW, newH));
061: }
062: if (!JFrame.isDefaultLookAndFeelDecorated()) {
063: ResizableFrame.this .setBounds(newX, newY,
064: newW, newH);
065: }
066: }
067:
068: @Override
069: public boolean isTopLevel() {
070: return true;
071: }
072: };
073: }
074: };
075: setContentPane(_resizablePanel);
076:
077: // make sure the content pane resized along with the window.
078: addComponentListener(new ComponentAdapter() {
079: @Override
080: public void componentResized(ComponentEvent e) {
081: _resizablePanel.setSize(getSize());
082: }
083: });
084: }
085:
086: /**
087: * Sets the border of the resizable window. Do not pass in an empty border. Otherwise
088: * the window won't be resizable.
089: *
090: * @param border the border.
091: */
092: public void setBorder(Border border) {
093: _resizablePanel.setBorder(border);
094: }
095:
096: /**
097: * Gets the border of the resizable window. By default, <code>UIManagerLookup.getBorder("Resizable.resizeBorder")</code>
098: * will be used.
099: *
100: * @return the border.
101: */
102: public Border getBorder() {
103: return _resizablePanel.getBorder();
104: }
105:
106: /**
107: * Gets the underlying Resizable.
108: *
109: * @return the Resizable.
110: */
111: public Resizable getResizable() {
112: return _resizablePanel.getResizable();
113: }
114: }
|