使用KeyListener退出while循环

时间:2015-03-17 18:28:10

标签: java while-loop keylistener

我正在尝试制作自己的Autoclicker,并且无法弄清楚如何使用KeyListener退出“点击”。我知道问题的一部分是窗口需要成为KeyListener工作的焦点,但我不知道如何实现它。

我将添加所有代码,以便您自己了解如何解决它。

public class GUIMain extends JFrame {
protected static GUIMain window = null;
protected static Box mainFrame = new Box(BoxLayout.Y_AXIS);
protected Click clicker = null;

public GUIMain(String title) {
    super(title);
    mainBox();
    startRunning();

    this.addKeyListener(clicker);
    this.toFront();
    this.pack();
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
}

public static void main(String[] args) {
    window = new GUIMain("AutoClicker v0.1");
}

protected void mainBox() {
    this.setLayout(new BoxLayout(this.getContentPane(), 
            BoxLayout.Y_AXIS));
    mainFrame.setPreferredSize(new Dimension(250, 150));
    this.getContentPane().setBackground(Color.WHITE);
    this.add(mainFrame);
    mainFrame.add(Box.createVerticalGlue());
}

protected void startRunning() {
    JButton startButton = new JButton(" Start ");
    mainFrame.add(startButton);
    mainFrame.add(Box.createVerticalGlue());
    startButton.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            clicker = new Click();
        }
    });

}
}

现在是实现KeyListener的“Click”类。 我在while循环中得到了i< 100部分,以便在修复它时不会永远循环。

public class Click extends JComponent implements KeyListener{
private static boolean runClicks = true;
static Robot robot = null;

public Click() {
    mouseClick();
}

protected static void mouseClick() {
    int i = 0;
    try {
        robot = new Robot ();
    } catch (AWTException e) {
        e.printStackTrace();
    }
    while(runClicks && i < 100) {
            click(-1440, 540);
            i++;
    }
}

private static void click(int x, int y) {
    robot.mouseMove(x, y);
    robot.delay(50);
    robot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
    robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_F9) {
        runClicks = false;
    }
}

@Override
public void keyReleased(KeyEvent e) {
}

@Override
public void keyTyped(KeyEvent e) {  
}
}

我是否需要考虑一种新方法来解决这个问题,还是可以通过一些修改来完成?

1 个答案:

答案 0 :(得分:0)

我无论如何都不是Java专家,但是如果你需要给窗口焦点,你可以使用requestFocus()调用。

public static void main(string[] args) {
    JFrame frame = new JFrame();
    frame.add // whatever you want to add to your frame and sizing
    frame.requestFocus();
    frame.pack();
    frame.setVisible(true);
}