DemoUtilities.java revision 13978:1993af50385d
1/* 2 * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23package com.sun.swingset3.demos; 24 25import java.awt.*; 26import java.net.URI; 27import java.io.IOException; 28import javax.swing.*; 29 30/** 31 * @author Pavel Porvatov 32 */ 33public class DemoUtilities { 34 35 private DemoUtilities() { 36 // Hide constructor 37 } 38 39 public static void setToplevelLocation(Window toplevel, Component component, 40 int relativePosition) { 41 42 Rectangle compBounds = component.getBounds(); 43 44 // Convert component location to screen coordinates 45 Point p = new Point(); 46 SwingUtilities.convertPointToScreen(p, component); 47 48 int x; 49 int y; 50 51 // Set frame location to be centered on panel 52 switch (relativePosition) { 53 case SwingConstants.NORTH: { 54 x = (p.x + (compBounds.width / 2)) - (toplevel.getWidth() / 2); 55 y = p.y - toplevel.getHeight(); 56 break; 57 } 58 case SwingConstants.EAST: { 59 x = p.x + compBounds.width; 60 y = (p.y + (compBounds.height / 2)) - (toplevel.getHeight() / 2); 61 break; 62 } 63 case SwingConstants.SOUTH: { 64 x = (p.x + (compBounds.width / 2)) - (toplevel.getWidth() / 2); 65 y = p.y + compBounds.height; 66 break; 67 } 68 case SwingConstants.WEST: { 69 x = p.x - toplevel.getWidth(); 70 y = (p.y + (compBounds.height / 2)) - (toplevel.getHeight() / 2); 71 break; 72 } 73 case SwingConstants.NORTH_EAST: { 74 x = p.x + compBounds.width; 75 y = p.y - toplevel.getHeight(); 76 break; 77 } 78 case SwingConstants.NORTH_WEST: { 79 x = p.x - toplevel.getWidth(); 80 y = p.y - toplevel.getHeight(); 81 break; 82 } 83 case SwingConstants.SOUTH_EAST: { 84 x = p.x + compBounds.width; 85 y = p.y + compBounds.height; 86 break; 87 } 88 case SwingConstants.SOUTH_WEST: { 89 x = p.x - toplevel.getWidth(); 90 y = p.y + compBounds.height; 91 break; 92 } 93 default: 94 case SwingConstants.CENTER: { 95 x = (p.x + (compBounds.width / 2)) - (toplevel.getWidth() / 2); 96 y = (p.y + (compBounds.height / 2)) - (toplevel.getHeight() / 2); 97 } 98 } 99 toplevel.setLocation(x, y); 100 } 101 102 public static boolean browse(URI uri) throws IOException { 103 // Try using the Desktop api first 104 try { 105 Desktop desktop = Desktop.getDesktop(); 106 desktop.browse(uri); 107 108 return true; 109 } catch (SecurityException e) { 110 e.printStackTrace(); 111 } 112 113 return false; 114 } 115} 116