/*
* $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);
}
});
}
}
}
}