/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) * any later version. * This program 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 General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package com.bc.ceres.swing; import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; /** * Helper class providing some utilities for Swing programming. */ public class SwingHelper { /** * Centers the given component over another component. * <p/> * <p> The method performs the alignment by setting a newly computed location for the component. It does not alter * the component's size. * * @param comp the component whose location is to be altered * @param alignComp the component used for the alignment of the first component, if <code>null</code> the component * is ceneterd within the screen area * * @throws IllegalArgumentException if the component is <code>null</code> */ public static void centerComponent(Component comp, Component alignComp) { if (comp == null) { throw new IllegalArgumentException("comp must not be null"); } Dimension compSize = comp.getSize(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int x1, y1; if (alignComp != null && !new Rectangle(alignComp.getSize()).isEmpty()) { Point alignCompOffs = alignComp.getLocation(); Dimension alignCompSize = alignComp.getSize(); x1 = alignCompOffs.x + (alignCompSize.width - compSize.width) / 2; y1 = alignCompOffs.y + (alignCompSize.height - compSize.height) / 2; } else { x1 = (screenSize.width - compSize.width) / 2; y1 = (screenSize.height - compSize.height) / 2; } int x2 = x1 + compSize.width; int y2 = y1 + compSize.height; if (x2 >= screenSize.width) { x1 = screenSize.width - compSize.width - 1; } if (y2 >= screenSize.height) { y1 = screenSize.height - compSize.height - 1; } if (x1 < 0) { x1 = 0; } if (y1 < 0) { y1 = 0; } comp.setLocation(x1, y1); } }