En este tutorial crearemos una aplicación que bloqueara toda la pantalla de la PC y no nos dejara realizar ninguna tarea hasta introducir un USUARIO y CONTRASEÑA. Lo que haremos sera crear un JFrame sin bordes que cubra toda la pantalla, no se deshabilitara el teclado ni el ratón pero para evitar la combinación de teclas como WINDOWS + D o CTRL + ALT + SUP, ALT+F4, TABS, etc que nos permiten cerrar el programa o cambiar de foco, lo que haremos sera ejecutar una tarea en paralelo que cambie las propiedades de la aplicación a cada momento para que nuestra aplicación este siempre al frente, para esto java cuenta con ScheduledExecutorService.
Necesitamos
– IDE Netbeans 7.2
– Java
Tiempo: 15 minutos
Nivel: Intermedio
1.- Crea un nuevo proyecto llamado «blocked» sin el MAIN class (*). Añade dos JFrame «jFrameBlocked.java» y «jFrameGUI.java», finalmente añade una clase que se llamara «jBlocked.java».
2.- jFrameGUI.java
Este JFrame solo se mostrara una vez que se desbloquee la pantalla, seria el equivalente a nuestra aplicación principal. No agregaremos nada de código solo un par de JLabels como muestra la imagen de abajo.
3.- jFrameBlocked.java
Diseña este JFrame tal cual se ve en la imagen de abajo, ten cuidado en colocar los nombres que están marcados con un punto rojo, es importante.
Esta JFrame es el que bloqueara toda la pantalla, por el momento no escribiremos nada de código primero debemos crear la clase «jBlocked.java«.
4.- jBlocked.java
Esta es la clase que una vez sea creada ejecutara una tarea cada «N» tiempo, en este ejemplo sera cada 50 milisegundos lo que no da tiempo ni para usar la tecla TABS y cambiar de aplicación o.O
El código de esta clase es sencillo ya que esta reducido a una método para comenzar la tarea y otro para cambiar las propiedades de un JFrame. Cada 50 milisegundos, se cambia la propiedad del JFrame para maximizar la ventana (JFrame.MAXIMIZED_BOTH), también se utiliza el método toFront() para que el JFrame este siempre al frente, esta combinación de métodos + el tiempo en que son utilizados, impiden que una persona haga uso del escritorio.
El JFrame que sera pasado como parámetro en el constructor de clase, corresponde a JFrameBlocked.java
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.JFrame; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class jBlocked { private JFrame jframe=null; /** * Constructor de clase */ public jBlocked( JFrame f ) { this.jframe = f; } /** * ejecuta una tarea cada "n" tiempo * Para evitar que el usuario utilice las teclas (WINDOWS + D)(TAB) y asi perder el foco * de la aplicación, cada 50 milisegundos se envia el JFrame al frente y se cambia su propiedad a maximizado */ public void block() { ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate( new Runnable() { @Override public void run() { front(); } }, 500, 50 , TimeUnit.MILLISECONDS ); //comienza dentro de 1/2 segundo y luego se repite cada N segundos } /** * */ public void front() { jframe.setExtendedState( JFrame.MAXIMIZED_BOTH );//maximizado jframe.toFront(); } }//--> fin
5.- Una vez que tenemos creado la clase jBlocked, debemos implementarla en el JFrame jFrameBlocked.
– Modificaremos el constructor de la siguiente manera:
01 public jFrameBlocked() { 02 03 this.setUndecorated(true);//quita bordes a jframe 04 05 initComponents(); 06 07 this.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );//evita cerra jframe con ALT+C 08 this.setExtendedState( MAXIMIZED_BOTH );//maximizado 09 this.setAlwaysOnTop(true);//siempre al frente 10 //nueva instancia de jBlocked pasando como parametros e este JFrame 11 new jBlocked( this ).block(); 12 13 }
También debemos agregar los eventos para cuando se presionen los botones ENTRAR o CANCELAR
01 private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { 02 System.exit(0); 03 } 04 05 private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) { 06 if( this.user.getText().equals("user") && this.pass.getText().equals("1234") ) 07 { 08 new jFrameGUI().setVisible(true); 09 this.dispose(); 10 } 11 else 12 { 13 JOptionPane.showMessageDialog( this, "Access denied"); 14 } 15 }
Como puede verse se utiliza un IF para controlar su los datos de ingreso son correctos o no, el usuario es USER y el passwoord es 1234, si los datos son incorrectos, muestra una ventana de error, caso contrario, muestra nuestra aplicación y cierra el JFrame de bloqueo.
Proyecto completo + Ejemplo HERE
(*) Cuando un proyecto creado en Netbeans no cuenta con la clase Main, se debe indicar al IDE que clase ejecutar primero, para esto se debe ir a PROPIEDADES (properties), y en la opción RUN en la sección que dice Main Class, buscar en el proyecto la clase que hará de MAIN.
La autenticación basada en API keys es un método para proteger el acceso a una API. Se utiliza una clave alfanumérica ún[...]
En este post conocernos lo que son las Estructuras de Control IF en los script de Bash. Estas estructuras nos ayudan a c[...]
En este post implementaremos el código necesario para multiplicar matrices con el lenguaje Kotlin, pero para realizar es[...]
Este post es la continuación del tutorial «Generador de código para Netbeans« en donde vimos como crear un modulo para N[...]
En esta oportunidad, se deja a disposición de la comunidad de programadores de Bolivia y también porque no, del que quie[...]
1. Dado N números enteros ingresados por teclado, determine el promedio de estos 01 static void Main(string[] args) 02 {[...]