import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Frame extends JFrame {
 
        private static final long serialVersionUID = 1L;
 
        private JPanel container;
        private JPanel ratePanel, delayPanel, south, numberPanel;
        private JButton button1, button2;
        private JTextField delayText, rateText, numberText;
        private JLabel delayLabel, rateLabel, numberLabel;
        private boolean autoclick = false;
        private Thread t;
 
        public Frame() {
 
                this.setTitle("Autoclick");
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setSize(250, 320);
                this.setLocationRelativeTo(null);
                this.setResizable(false);
                this.setAlwaysOnTop(true);
 
                initComposant();
 
                this.setContentPane(container);
                this.setVisible(true);
        }
 
        private void initComposant() {
                // Delay
                delayPanel = new JPanel();
                delayPanel.setBorder(BorderFactory.createTitledBorder("Delay"));
                delayPanel.setPreferredSize(new Dimension(150, 75));
 
                delayText = new JTextField();
                delayText.setPreferredSize(new Dimension(50, 25));
                delayLabel = new JLabel("Delay in millisecodns");
                delayPanel.add(delayText);
                delayPanel.add(delayLabel);
 
                // Rate
                ratePanel = new JPanel();
                ratePanel.setPreferredSize(new Dimension(150, 75));
                ratePanel.setBorder(BorderFactory.createTitledBorder("Rate"));
                rateText = new JTextField();
                rateText.setPreferredSize(new Dimension(50, 25));
                rateLabel = new JLabel("Rate in milliseconds");
                ratePanel.add(rateLabel);
                ratePanel.add(rateText);
 
                // Number
                numberPanel = new JPanel();
                numberPanel.setPreferredSize(new Dimension(150, 75));
                numberPanel.setBorder(BorderFactory.createTitledBorder("Number"));
                numberText = new JTextField();
                numberText.setPreferredSize(new Dimension(50, 25));
                numberLabel = new JLabel("Number of clicks");
                numberPanel.add(numberLabel);
                numberPanel.add(numberText);
 
                // Creation du JPanel south
                south = new JPanel();
 
                // Création du bouton1 et bouton2 et ajout au JPanel south
                this.button1 = new JButton("GO!");
                this.button2 = new JButton("STOP!");
 
                this.button1.setEnabled(true);
                this.button2.setEnabled(false);
 
                this.button1.addActionListener(new Button1Listener());
                this.button2.addActionListener(new Button2Listener());
 
                south.add(this.button1);
                south.add(this.button2);
 
                container = new JPanel();
                container.add(delayPanel);
                container.add(ratePanel);
                container.add(numberPanel);
                container.add(south, BorderLayout.SOUTH);
 
        }
 
        public void go() {
 
                long rate = Long.parseLong(rateText.getText());
                System.out.println(rate);
                long delay = Long.parseLong(delayText.getText());
                System.out.println(delay);
                int number = Integer.parseInt(numberText.getText());
                System.out.println(number);
 
                try {
                        Thread.sleep(delay);
                } catch (InterruptedException e) {
                }
 
                for (int i = 0; i < number && autoclick; i++) {
                        try {
                                Robot robot = new Robot();
 
                                try {
                                        Thread.sleep(rate);
                                        robot.mousePress(InputEvent.BUTTON1_MASK);
                                        robot.mouseRelease(InputEvent.BUTTON1_MASK);
 
                                } catch (InterruptedException ex) {
 
                                }
 
                        } catch (AWTException e) {
 
                        }
                }
               
                button2.doClick();
        }
 
        // Class qui écoute le 1er bouton
        class Button1Listener implements ActionListener {
                public void actionPerformed(ActionEvent arg0) {
                        autoclick = true;
                        t = new Thread(new AutoClick());
                        t.start();
                        button1.setEnabled(false);
                        button2.setEnabled(true);
                }
 
        }
 
        // Class qui écoute le 2nd bouton
        class Button2Listener implements ActionListener {
                public void actionPerformed(ActionEvent arg0) {
                        autoclick = false;
                        button1.setEnabled(true);
                        button2.setEnabled(false);
                }
 
        }
 
        class AutoClick implements Runnable {
                public void run() {
                        go();
                }
        }
 
        public static void main(String[] args) {
                new Frame();
        }
 
}