我正在尝试制作自己的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) {
}
}
我是否需要考虑一种新方法来解决这个问题,还是可以通过一些修改来完成?
答案 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);
}