Hola a todos, hoy os explicare a como usar la clase Robot en Java, muy útil en aplicaciones gráficas.
La clase Robot nos sirve para simular un comportamiento que le indiquemos, como pulsar un botón o simular un movimiento de ratón. Esta clase es muy útil para las aplicaciones gráficas, ya que nos permite realizar un evento una serie de veces como si fuera un bucle.
Quizá te estés preguntando, porque usar esta si podemos usar un bucle, la respuesta es porque si ejecutamos un bucle, el resultado no se vera reflejado en la ventana hasta que termine el bucle.
Esta clase se encuentra en el paquete java.awt., también hay que importar AWTException que esta en el mismo paquete.
Veamos un ejemplo, tenemos 6 etiquetas que cuando pulsemos Enter se rellenaran una y cuando pulsemos de nuevo otra, pero nosotros solo pulsaremos el primer Enter, el resto lo hará el robot.
import java.awt.AWTException; import java.awt.Color; import java.awt.EventQueue; import javax.swing.*; import java.awt.Robot; import java.awt.event.*; public class EjemploRobot extends JFrame { private JPanel contentPane; //Atributos especificos para el ejemplo private JLabel etiquetas[]; private int indice=0; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { EjemploRobot frame = new EjemploRobot(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public EjemploRobot() { //Parametros asociados a la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setLayout(null); setContentPane(contentPane); //Permitimos que podamos ejecutar el evento de keylistener contentPane.setFocusable(true); //Componentes JLabel lblPulsaEnterPara = new JLabel("Pulsa enter para rellenar las etiquetas"); lblPulsaEnterPara.setBounds(126, 24, 230, 14); contentPane.add(lblPulsaEnterPara); //Creamos un array que almacena JLabel etiquetas=new JLabel[6]; etiquetas[0] = new JLabel("1"); etiquetas[0].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[0].setBounds(47, 111, 54, 14); contentPane.add(etiquetas[0]); etiquetas[1] = new JLabel("2"); etiquetas[1].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[1].setBounds(169, 111, 46, 14); contentPane.add(etiquetas[1]); etiquetas[2] = new JLabel("3"); etiquetas[2].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[2].setBounds(298, 111, 46, 14); contentPane.add(etiquetas[2]); etiquetas[3] = new JLabel("4"); etiquetas[3].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[3].setBounds(47, 193, 54, 14); contentPane.add(etiquetas[3]); etiquetas[4] = new JLabel("5"); etiquetas[4].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[4].setBounds(169, 193, 46, 14); contentPane.add(etiquetas[4]); etiquetas[5] = new JLabel("6"); etiquetas[5].setHorizontalAlignment(SwingConstants.CENTER); etiquetas[5].setBounds(298, 193, 46, 14); contentPane.add(etiquetas[5]); //Eventos contentPane.addKeyListener(new KeyListener(){ public void keyTyped(KeyEvent e){ } public void keyPressed(KeyEvent e){ //Solo entrara si pulsamos enter o si no hay etiquetas en el array if(e.getKeyCode()==KeyEvent.VK_ENTER && indice<etiquetas.length){ //Colorea el fondo de la etiqueta de rojo etiquetas[indice].setBackground(new Color(255, 0, 0)); etiquetas[indice].setOpaque(true); indice++; try { //Espera un segundo Thread.sleep(1000); //creamos un robot y le indicamo que presione un enter Robot robot=new Robot(); robot.keyPress(KeyEvent.VK_ENTER); } catch (AWTException e1) { //Excepcion de robot e1.printStackTrace(); } catch (InterruptedException e1) { //Excepcion de thread e1.printStackTrace(); } } } public void keyReleased(KeyEvent e){ } }); } }
Si necesitas algún método mas, puedes consultar el API de Java.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
:-) OK !