[JAVA] Hacer Ventanas Transparentes
Hola compañeros de Intercambios!!! En ésta ocasión voy a mostrar cómo hacer una Ventana Transparente en JAVA…
El efecto de translucidez simple se utiliza para hacer una ventana transparente de manera uniforme se aplica a una ventana, en donde todos los píxeles de la ventana se le asigna un valor de alfa que determina el nivel de opacidad disponible. Cuanto menor sea el valor más transparente se hace la ventana, con el nivel de opacidad mínima se hace la ventana totalmente transparente (imposible de ver) y colocando la opacidad en el nivel máximo la ventana ya no sería transparente.
Para lograr ese efecto vamos a utilizar un archivo Jar el cual se encuentra dentro del proyecto en la carpeta lib.
Para importar la clase transparentWindows hacemos:
import transparentWindows.AWTUtilitiesWrapper;
Esa clase proporciona Un método llamado setWindowOpacity(Ventana, opacidad);
Donde Ventana -> representa un JFrame o un JDialog
Opacidad -> representa un valor Flotante que va desde 0.0 hasta 1.0 donde 0.0 nivel de opacidad mínimo y 1.0 nivel de opacidad máximo (No Transparente).
¡Para los que no sepan añadir un Jar al proyecto!
En Eclipse:
Nos ubicamos en nuestro proyecto clic derecho -> propiedades, luego buscamos donde dice Java Build Path, entramos en la pestaña Librerías y luego add External Jars…. Buscamos nuestro archivo Jar y listo!!!
En NetBeans:
Ubicamos la carpeta Librerías en nuestro proyecto clic derecho add Jar/Folder, lo buscamos y listo
Código PHP:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import transparentWindows.AWTUtilitiesWrapper;
public class Ventana extends JFrame implements ChangeListener{
private final int MIN = 0;
private final int MAX = 10;
private final int INIT = 8;
private float trans = .8f;
private AWTUtilitiesWrapper utilities = null;
private JLabel miLabel = null, labelOpacidad = null;
private JSlider slider = null;
private GridBagConstraints gbc = null;
private JPanel panel = null;
public Ventana(){
gbc = new GridBagConstraints();
this.setTitle("Ventana Transparente");
// creamos un objeto de tipo AWTUtilitiesWrapper
utilities = new AWTUtilitiesWrapper();
// le asignamos la opacidad por defecto 0.8f
utilities.setWindowOpacity(this, trans);
panel = new JPanel(new GridBagLayout());
slider = new JSlider(JSlider.HORIZONTAL, MIN, MAX, INIT);
slider.addChangeListener(this);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
labelOpacidad = new JLabel("Nivel de Opacidad");
labelOpacidad.setFont(new Font("Arial", 3, 14));
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(10,10,10,10);
panel.add(labelOpacidad, gbc);
miLabel = new JLabel("[By RagdE]");
miLabel.setForeground(Color.red);
miLabel.setFont(new Font("Arial", 1, 20));
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(slider, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
panel.add(miLabel, gbc);
this.add(panel, BorderLayout.NORTH);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(300, 180);
this.setResizable(false);
this.setVisible(true);
}
// Manejador del JSlider
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) { // preguntamos si se ha movido el nivel
int fps = (int)source.getValue(); // se obtiene dicho nivel en entero
// pero como el nivel de transparencia tiene que ser fotante lo convertimos fps / 10.0
trans = (float) ((new Float(fps)) / 10.);
if(trans < 0.4) // si es menor que 0.4 asiganar a trans = 0.4 para que no desaparesca por completo
trans = 0.4f;
utilities.setWindowOpacity(this, trans); // asignamos el nivel de opacidad
}
}
public static void main(String[] args) {
new Ventana();
}
}
|