java.awt.Robot sınıfı kullanılarak birbirinden enteresan programlar yazabilirsiniz. Robot sınıfı temel olarak fare ve klavyenin kendi kendine otomatik olarak hareket ettirilmesini sağlar. Arcıca ekranın yakalanarak(screeshot) imajını bu sınıf yardımıyla alabilirsiniz.Ben bir projede kullanmak için fareyi otomatik bir şekilde hareket ettirmem gerekiyordu. Robot sınıfı imdada yetişti. Aşağıdaki kodda öğrenme amaçlı yaptığım bir alıştırma mevcut. Bu uygulamada bir pencerenin tam ortasında “TEST” etiketi bulunmakta.

Fare bu programda otomatik olarak her 2 saniyede pencere içerisinde rasgele noktalara atlıyor. Eğer bu nokta etiket içerisinde ise “HEYY” yazısını görüyorsunuz.

Bu uygulamayı yapmak için Timerve Robot ve diğer bilinen Java sınıflarını kullandım. Şimdide koda geçelim:import java.awt.*;import java.awt.event.*;import java.util.Random;import javax.swing.*;import javax.swing.border.BevelBorder;public class TestFrame extends javax.swing.JFrame {private JLabel lblTest;private Robot robot ;private Random rnd = new Random();/*** Constructor*/public TestFrame() {super(“Test Penceresi”);initGUI();try {robot = new Robot();} catch (AWTException e1) {e1.printStackTrace();}final Point p = this.getLocation();// pencerenin bulundugu yer sol ustfinal Dimension d = this.getSize();// pencerenin buyuklugu//Her iki saniyede bir mause hareket ettirilecekTimer t = new Timer(2000, new ActionListener() {public void actionPerformed(ActionEvent e) {// acilan pencere uzerinde rastele bir noktaya fareyi götür.robot.mouseMove(rnd.nextInt((int)(d.getWidth()))+(int)(p.getX()),rnd.nextInt((int)(d.getHeight()))+(int)(p.getY()));}});t.start();}/*** GUI ile ilgili işlemler*/private void initGUI() {try {this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(null);{lblTest = new JLabel();getContentPane().add(lblTest);lblTest.setText(“TEST”);lblTest.setBounds(106, 76, 177, 101);lblTest.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));lblTest.setFont(new java.awt.Font(“Tahoma”, 0, 16));lblTest.setBackground(new Color(255, 255, 179));lblTest.setForeground(new Color(0, 0, 0));lblTest.setOpaque(true);lblTest.setAlignmentX(0.5f);lblTest.setHorizontalAlignment(SwingConstants.CENTER);// Fare TEST yazısının üzerine gelince HEYYY yazacak// Ayrılınca tekrar TEST yazısı yazacaklblTest.addMouseListener(new MouseAdapter() {public void mouseExited(MouseEvent evt) {lblTest.setBackground(new Color(255, 255, 179));lblTest.setText(“TEST”);}public void mouseEntered(MouseEvent evt) {lblTest.setBackground(Color.RED);lblTest.setText(“HEYYY!”);}});}setSize(400, 300);this.setLocation(100, 100);} catch (Exception e) {e.printStackTrace();}}/*** Main* @param args*/public static void main(String[] args) {TestFrame inst = new TestFrame();inst.setVisible(true);}}
Koddaki yorumlar anlamınız oldukça kolaylaştıracaktır. Koddaki can alıcı noktalar Robot sınıfının oluşturulması ve kullanımı:Robot robot = new Robot();robot.mouseMove(x, y);
ve Timer oluşturulması ve başlatılması diyebiliriz:Timer t = new Timer(2000, new ActionListener() {public void actionPerformed(ActionEvent e){ /*…*/ } });t.start();
Böylelikle makro programları yapabilecek, otomatik olarak işlerinizi yapan programlar yazabileceksiniz.