blob: 60c275865513420631c6f23ab0fe4a8a19703f4e [file] [log] [blame]
package aurelienribon.utils.swing;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Desktop.Action;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
/**
* @author Aurelien Ribon | http://www.aurelienribon.com
*/
public class SwingHelper {
/**
* Adds a listener to the window parent of the given component. Can be
* before the component is really added to its hierachy.
* @param source The source component
* @param listener The listener to add to the window
*/
public static void addWindowListener(final Component source, final WindowListener listener) {
if (source instanceof Window) {
((Window)source).addWindowListener(listener);
} else {
source.addHierarchyListener(new HierarchyListener() {
@Override public void hierarchyChanged(HierarchyEvent e) {
if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) == HierarchyEvent.SHOWING_CHANGED) {
SwingUtilities.getWindowAncestor(source).addWindowListener(listener);
}
}
});
}
}
/**
* Centers a component according to the window location.
* @param wnd The parent window
* @param cmp A component, usually a dialog
*/
public static void centerInWindow(Window wnd, Component cmp) {
Dimension size = wnd.getSize();
Point loc = wnd.getLocationOnScreen();
Dimension cmpSize = cmp.getSize();
loc.x += (size.width - cmpSize.width)/2;
loc.y += (size.height - cmpSize.height)/2;
cmp.setBounds(loc.x, loc.y, cmpSize.width, cmpSize.height);
}
/**
* Opens the given website in the default browser, or show a message saying
* that no default browser could be accessed.
* @param parent The parent of the error message, if raised
* @param uri The website uri
*/
public static void browse(Component parent, String uri) {
boolean cannotBrowse = false;
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.BROWSE)) {
try {
Desktop.getDesktop().browse(new URI(uri));
} catch (URISyntaxException ex) {
} catch (IOException ex) {
cannotBrowse = true;
}
} else {
cannotBrowse = true;
}
if (cannotBrowse) {
JOptionPane.showMessageDialog(parent,
"It seems that I can't open a website using your"
+ "default browser, sorry.");
}
}
}