package com.compomics.util.gui.utils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.Timer;
/**
* Swing utilities methods. Based on code from:
* http://www.aurelienribon.com/blog/2012/07/tutorial-beautifying-the-dialogs-in-swing-applications/
*
* @author Harald Barsnes
*/
public class SwingUtils {
// @TODO: requires java 7, hence not in use at the moment, see the lines that are commented out
/**
* Creates an animation to fade the dialog opacity from 0 to 1. Using a
* default delay of 5 ms and an increment size of 0.05.
*
* @param dialog the dialog to fade in
*/
public static void fadeIn(final JDialog dialog) {
fadeIn(dialog, 5, 0.05f);
}
/**
* Creates an animation to fade the dialog opacity from 0 to 1.
*
* @param dialog the dialog to fade in
* @param delay the delay in ms before starting and between each change
* @param incrementSize the increment size
*/
public static void fadeIn(final JDialog dialog, int delay, final float incrementSize) {
final Timer timer = new Timer(delay, null);
timer.setRepeats(true);
timer.addActionListener(new ActionListener() {
private float opacity = 0;
@Override
public void actionPerformed(ActionEvent e) {
opacity += incrementSize;
//dialog.setOpacity(Math.min(opacity, 1)); // requires java 1.7
if (opacity >= 1) {
timer.stop();
}
}
});
//dialog.setOpacity(0); // requires java 1.7
timer.start();
dialog.setVisible(true);
}
/**
* Creates an animation to fade the dialog opacity from 1 to 0. Using a
* default delay of 5 ms and an increment size of 0.05.
*
* @param dialog the dialog to fade out
*/
public static void fadeOut(final JDialog dialog) {
fadeOut(dialog, 5, 0.05f);
}
/**
* Creates an animation to fade the dialog opacity from 1 to 0, and then
* dispose.
*
* @param dialog the dialog to fade out
* @param delay the delay in ms before starting and between each change
* @param incrementSize the increment size
*/
public static void fadeOut(final JDialog dialog, int delay, final float incrementSize) {
final Timer timer = new Timer(delay, null);
timer.setRepeats(true);
timer.addActionListener(new ActionListener() {
private float opacity = 1;
@Override
public void actionPerformed(ActionEvent e) {
opacity -= incrementSize;
//dialog.setOpacity(Math.max(opacity, 0)); // requires java 1.7
if (opacity < 0) {
timer.stop();
dialog.dispose();
}
}
});
//dialog.setOpacity(1); // requires java 1.7
timer.start();
}
/**
* Creates an animation to fade the dialog opacity from 0 to 1, wait at 1
* and then fade to 0. Default initial time of 50 ms, increment size of 0.05
* and display time of 10000 ms.
*
* @param dialog the dialog to display
*/
public static void fadeInAndOut(final JDialog dialog) {
fadeInAndOut(dialog, 50, 0.05f, 10000);
}
/**
* Creates an animation to fade the dialog opacity from 0 to 1, wait at 1
* and then fade to 0 and dispose.
*
* @param dialog the dialog to display
* @param delay the delay in ms before starting and between each change
* @param incrementSize the increment size
* @param displayTime the time in ms the dialog is fully visible
*/
public static void fadeInAndOut(final JDialog dialog, final int delay, final float incrementSize, final int displayTime) {
final Timer timer = new Timer(delay, null);
timer.setRepeats(true);
timer.addActionListener(new ActionListener() {
private float opacity = 0;
private boolean displayed = false;
@Override
public void actionPerformed(ActionEvent e) {
if (!displayed) {
opacity += incrementSize;
//dialog.setOpacity(Math.min(opacity, 1)); // requires java 1.7
if (opacity >= 1) {
timer.setDelay(displayTime);
displayed = true;
}
} else {
timer.setDelay(delay);
opacity -= incrementSize;
//dialog.setOpacity(Math.max(opacity, 0)); // requires java 1.7
if (opacity < 0) {
timer.stop();
dialog.dispose();
}
}
}
});
//dialog.setOpacity(0); // requires java 1.7
timer.start();
dialog.setVisible(true);
}
}