La clase Robot de java nos permite simular acciones que hacen las personas tanto con el teclado como con el ratón, podemos “tomar el control” del equipo con acciones como pueden ser mover el ratón, presionar teclas, etc.
En este ejemplo vamos a utilizar la clase Robot para hacer un Jpanel transparente, con el código siguiente podremos realizar nuestro primer formulario transparente en java .
¿Cómo hacer un formulario transparente en java?
Como hemos comentado anteriormente con la clase Robot podemos presionar las teclas de nuestro teclado, en este caso vamos a presionar la tecla imprimir pantalla (capturar pantalla) utilizando el siguiente método “createScreenCapture()” en el que le pasaremos el ancho y el alto de la captura.
El código completo para hacer el formulario transparente sería así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import javax.swing.*; import java.awt.*; public class Transparente extends JComponent { private Image background; public Transparente(JFrame frame) { updateBackground( ); } public void updateBackground( ) { try { Robot robot = new Robot( ); Toolkit tk = Toolkit.getDefaultToolkit( ); Dimension dim = tk.getScreenSize( ); background = robot.createScreenCapture( new Rectangle(0,0,(int)dim.getWidth( ), (int)dim.getHeight( ))); } catch (Exception ex) { ex.printStackTrace( ); } } public void paintComponent(Graphics g) { Point pos = this.getLocationOnScreen( ); Point offset = new Point(-pos.x,-pos.y); g.drawImage(background,offset.x,offset.y,null); } public static void main(String[] args) { JFrame frame = new JFrame("Transparente"); Transparente bg = new Transparente(frame); bg.setLayout(new BorderLayout()); frame.getContentPane( ).add("Center",bg); frame.setSize(600, 600); frame.setVisible(true); } } |
En este caso, cuando cambias el tamaño del formulario se vuelve a ejecutar el método updateBackground(), de este modo el programa vuelve a realizar un “imprimir pantalla” que mostrará de nuevo con las nuevas medidas de ancho o alto.
Sin embargo, si solo mueves el formulario podrás ver que no realiza de nuevo el updateBackground() y dejará tu primera imagen como fondo del formulario, ahora no parecerá transparente.
En el caso de que necesites un formulario que ocupe toda la pantalla puedes utilizar el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import javax.swing.*; import java.awt.*; public class Transparente extends JComponent { private Image background; public Transparente(JFrame frame) { updateBackground( ); } public void updateBackground( ) { try { Robot robot = new Robot( ); Toolkit tk = Toolkit.getDefaultToolkit( ); Dimension dim = tk.getScreenSize( ); background = robot.createScreenCapture( new Rectangle(0,0,(int)dim.getWidth( ), (int)dim.getHeight( ))); } catch (Exception ex) { ex.printStackTrace( ); } } public void paintComponent(Graphics g) { Point pos = this.getLocationOnScreen( ); Point offset = new Point(-pos.x,-pos.y); g.drawImage(background,offset.x,offset.y,null); } public static void main(String[] args) { JFrame frame = new JFrame("Transparente"); Transparente bg = new Transparente(frame); bg.setLayout(new BorderLayout()); frame.getContentPane( ).add("Center",bg); frame.setUndecorated(true); frame.setSize(Toolkit.getDefaultToolkit().getScreenSize()); frame.setVisible(true); } } |