Java Window Center packAndCenterWindow(Window dlg)

Here you can find the source of packAndCenterWindow(Window dlg)

Description

pack And Center Window

License

Open Source License

Declaration

static public void packAndCenterWindow(Window dlg) 

Method Source Code

//package com.java2s;
/*//ww w. j av  a 2 s  .c o m
    
The Martus(tm) free, social justice documentation and
monitoring software. Copyright (C) 2001-2007, Beneficent
Technology, Inc. (The Benetech Initiative).
    
Martus 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 2 of the License, or (at your option) any later
version with the additions and exceptions described in the
accompanying Martus license file entitled "license.txt".
    
It is distributed WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, including warranties of fitness of purpose or
merchantability.  See the accompanying Martus License and
GPL license for more details on the required license terms
for this software.
    
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
    
To the extent this copyrighted software code is used in the 
Miradi project, it is subject to a royalty-free license to 
members of the Conservation Measures Partnership when 
used with the Miradi software as specified in the agreement 
between Benetech and WCS dated 5/1/05.
*/

import java.awt.Dimension;

import java.awt.GraphicsConfiguration;

import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Window;

import javax.swing.JFrame;

public class Main {
    static public void packAndCenterWindow(Window dlg) {
        dlg.pack();//JAVA bug requires two packs to really get the correct dimensions
        dlg.pack();
        Dimension size = dlg.getSize();
        Dimension viewableScreenSize = getViewableScreenSize();

        if (size.height > viewableScreenSize.height)
            size.height = viewableScreenSize.height;

        if (size.width > viewableScreenSize.width)
            size.width = viewableScreenSize.width;

        Rectangle newScreen = getViewableRectangle();
        dlg.setSize(size);
        dlg.setLocation(center(size, newScreen));

    }

    static public Dimension getViewableScreenSize() {
        Dimension screenSizeExcludingToolbars = Toolkit.getDefaultToolkit().getScreenSize();
        Insets insets = getSystemInsets();
        screenSizeExcludingToolbars.width -= (insets.left + insets.right);
        screenSizeExcludingToolbars.height -= (insets.top + insets.bottom);
        return screenSizeExcludingToolbars;
    }

    static public Rectangle getViewableRectangle() {
        Insets insets = getSystemInsets();
        return new Rectangle(new Point(insets.left, insets.top), getViewableScreenSize());
    }

    static public Point center(Dimension inner, Rectangle outer) {
        int x = (outer.width - inner.width) / 2;
        int y = (outer.height - inner.height) / 2;
        return new Point(x + outer.x, y + outer.y);
    }

    private static Insets getSystemInsets() {
        JFrame tmpFrame = new JFrame();
        GraphicsConfiguration graphicsConfig = tmpFrame.getGraphicsConfiguration();
        Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(graphicsConfig);
        return insets;
    }
}

Related

  1. centerOnParent(final Window child, final boolean absolute)
  2. centerPosition(Window window, Window w, int width, int height)
  3. centerWindow(Window w)
  4. packAndDisplayInCenterOfScreen(final Window f)
  5. positionCenterScreen(Window window)
  6. showCentered(Window window)
  7. showCenterWindow(Window parent, Window window)