Installs/resets a ComponentListener to resize the given window to minWidth/Height if needed : ComponentListener « Swing Event « Java Tutorial






/*
 * $Id: WindowUtils.java,v 1.16 2009/05/25 16:37:52 kschaefe Exp $
 *
 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

import java.awt.Window;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentListener;

import javax.swing.SwingUtilities;

public class Utils {

  /**
   * Installs/resets a ComponentListener to resize the
   * given window to minWidth/Height if needed.
   *
   * @param window
   * @param minWidth
   * @param minHeight
   */
  public static void setMinimumSizeManager(Window window, int minWidth,
                                           int minHeight) {
      ComponentListener[] listeners = window.getComponentListeners();
      ComponentListener listener = null;
      for (ComponentListener l : listeners) {
          if (l instanceof MinSizeComponentListener) {
              listener = l;
              break;
          }
      }
      if (listener == null) {
          window.addComponentListener(new MinSizeComponentListener(
                  window, minWidth, minHeight));
      } else {
          ((MinSizeComponentListener) listener).resetSizes(minWidth,
                                                           minHeight);
      }
  }

  /**
   * Resets window size to minSize if needed.
   *
   * @author Patrick Wright
   */
  public static class MinSizeComponentListener extends ComponentAdapter {
      private Window window;
      private int minHeight;
      private int minWidth;

      MinSizeComponentListener(Window frame, int minWidth, int minHeight) {
          this.window = frame;
          resetSizes(minWidth, minHeight);
      }

      public void resetSizes(int minWidth, int minHeight) {
          this.minWidth = minWidth;
          this.minHeight = minHeight;
          adjustIfNeeded(window);
      }

      @Override
      public void componentResized(java.awt.event.ComponentEvent evt) {
          adjustIfNeeded((Window) evt.getComponent());
      }

      private void adjustIfNeeded(final Window window) {
          boolean doSize = false;
          int newWidth = window.getWidth();
          int newHeight = window.getHeight();
          if (newWidth < minWidth) {
              newWidth = minWidth;
              doSize = true;
          }
          if (newHeight < minHeight) {
              newHeight = minHeight;
              doSize = true;
          }
          if (doSize) {
              final int w = newWidth;
              final int h = newHeight;
              SwingUtilities.invokeLater(new Runnable() {
                  public void run() {
                      window.setSize(w, h);
                  }
              });
          }
      }
  }
}








15.10.ComponentListener
15.10.1.How to Write a Component ListenerHow to Write a Component Listener
15.10.2.ComponentListener and ComponentEvent
15.10.3.extends ComponentAdapter
15.10.4.A ComponentAdapter.
15.10.5.A position of a window on the screen.
15.10.6.Installs/resets a ComponentListener to resize the given window to minWidth/Height if needed