2017-08-29 138 views
0

我建立一个虚拟控制器,以便残障好友可以玩电脑游戏。 WASD工作正常。但我也需要它来模拟右键单击。我有我的mousePressedmouseReleased事件BUTTON3_DOWN_MASK,但它实际上并没有做任何事情。java的机器人右键点击不工作

我的代码如下。我知道这是马虎,但我试图找出第一个:

public class GameController2 extends JFrame implements MouseListener, MouseMotionListener, ComponentListener{ 
    public JLabel CoordsLabel; 
    public JLabel buttonWA; 
    public JLabel buttonW; 
    public JLabel buttonWD; 
    public JLabel buttonA; 
    public JLabel buttonD; 
    public JLabel buttonAS; 
    public JLabel buttonS; 
    public JLabel buttonSD; 
    public JFrame controlFrame; 
    public int mMovedX; 
    public int mMovedY; 
    public Robot robot; 
    public ImageIcon cIconOver, cIcon, rIcon, rIconOver, brIcon, brIconOver, bIcon, bIconOver, blIcon, blIconOver, lIcon, lIconOver, tlIcon, tlIconOver, tIcon, tIconOver, trIcon, trIconOver; 
    public int fWidth; 
    public int fHeight; 

    public ArrayList<JLabel> buttons; 
    public int gX = 0; 
    public int gY = 0; 

    public Icon origImg; 

    public GameController2(){ 
     controlFrame = new JFrame(); 
     GridBagLayout gridbag = new GridBagLayout(); 
     controlFrame.setLayout(gridbag); 
     controlFrame.setSize(300,300); 

     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.HORIZONTAL; 

     tlIcon = new ImageIcon("tlIconTest.png"); 
     buttonWA = new JLabel(); 
     buttonWA.setName("buttonWA"); 
     //buttonWA.setBackground(Color.BLACK); 
     buttonWA.setOpaque(true); 
     buttonWA.addMouseListener(this); 
     buttonWA.addMouseMotionListener(this); 
     c.gridx = 0; 
     c.gridy = 0; 
     c.weightx = 1; 
     c.weighty = 1; 
     gridbag.setConstraints(buttonWA, c); 
     controlFrame.add(buttonWA); 
     buttonWA.setIcon(tlIcon); 

     tIcon = new ImageIcon("tIconTest.png"); 
     buttonW = new JLabel("W"); 
     buttonW.setName("buttonW"); 
     buttonW.setBackground(Color.BLACK); 
     buttonW.setOpaque(true); 
     buttonW.addMouseListener(this); 
     buttonW.addMouseMotionListener(this); 
     c.gridx = 1; 
     c.gridy = 0; 
     gridbag.setConstraints(buttonW, c); 
     controlFrame.add(buttonW); 
     buttonW.setIcon(tIcon); 

     trIcon = new ImageIcon("trIconTest.png"); 
     buttonWD = new JLabel("W+D"); 
     buttonWD.setName("buttonWD"); 
     buttonWD.setBackground(Color.BLACK); 
     buttonWD.setOpaque(true); 
     buttonWD.addMouseListener(this); 
     buttonWD.addMouseMotionListener(this); 
     c.gridx = 2; 
     c.gridy = 0; 
     gridbag.setConstraints(buttonWD, c); 
     controlFrame.add(buttonWD); 
     buttonWD.setIcon(trIcon); 

     lIcon = new ImageIcon("lIconTest.png"); 
     buttonA = new JLabel("A"); 
     buttonA.setName("buttonA"); 
     buttonA.setBackground(Color.BLACK); 
     buttonA.setOpaque(true); 
     buttonA.addMouseListener(this); 
     buttonA.addMouseMotionListener(this); 
     c.gridx = 0; 
     c.gridy = 1; 
     gridbag.setConstraints(buttonA, c); 
     controlFrame.add(buttonA); 
     buttonA.setIcon(lIcon); 

     cIcon = new ImageIcon("rMouseOrig.png"); 
     CoordsLabel = new JLabel(); 
     CoordsLabel.setName("CoordsLabel"); 
     //CoordsLabel.setBackground(Color.BLACK); 
     CoordsLabel.setOpaque(true); 
     CoordsLabel.addMouseListener(this); 
     CoordsLabel.addMouseMotionListener(this); 
     c.gridx = 1; 
     c.gridy = 1; 
     gridbag.setConstraints(CoordsLabel, c); 
     controlFrame.add(CoordsLabel); 
     CoordsLabel.setIcon(cIcon); 

     rIcon = new ImageIcon("rIconTest.png"); 
     buttonD = new JLabel(); 
     buttonD.setBackground(Color.BLACK); 
     buttonD.setOpaque(true); 
     buttonD.setName("buttonD"); 
     buttonD.addMouseListener(this); 
     buttonD.addMouseMotionListener(this); 
     c.gridx = 2; 
     c.gridy = 1; 
     gridbag.setConstraints(buttonD, c); 
     controlFrame.add(buttonD); 
     buttonD.setIcon(rIcon); 

     blIcon = new ImageIcon("blIconTest.png"); 
     buttonAS = new JLabel(); 
     buttonAS.setBackground(Color.BLACK); 
     buttonAS.setOpaque(true); 
     buttonAS.setName("buttonAS"); 
     buttonAS.addMouseListener(this); 
     buttonAS.addMouseMotionListener(this); 
     c.gridx = 0; 
     c.gridy = 2; 
     gridbag.setConstraints(buttonAS, c); 
     controlFrame.add(buttonAS); 
     buttonAS.setIcon(blIcon); 

     bIcon = new ImageIcon("bIconTest.png"); 
     buttonS = new JLabel("S"); 
     buttonS.setName("buttonS"); 
     buttonS.setBackground(Color.BLACK); 
     buttonS.setOpaque(true); 
     buttonS.addMouseListener(this); 
     buttonS.addMouseMotionListener(this); 
     c.gridx = 1; 
     c.gridy = 2; 
     gridbag.setConstraints(buttonS, c); 
     controlFrame.add(buttonS); 
     buttonS.setIcon(bIcon); 

     brIcon = new ImageIcon("brIconTest.png"); 
     buttonSD = new JLabel(""); 
     buttonSD.setBackground(Color.BLACK); 
     buttonSD.setOpaque(true); 
     buttonSD.setName("buttonSD"); 
     buttonSD.addMouseListener(this); 
     buttonSD.addMouseMotionListener(this); 
     c.gridx = 2; 
     c.gridy = 2; 
     gridbag.setConstraints(buttonSD, c); 
     //controlFrame.add(buttonSD); 
     buttonSD.setIcon(brIcon); 

     controlFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     controlFrame.setVisible(true); 
     controlFrame.setFocusableWindowState(false); 

     rIconOver = new ImageIcon("rIconOverTest.png"); 
     brIconOver = new ImageIcon("brIconOverTest.png"); 
     bIconOver = new ImageIcon("bIconOverTest.png"); 
     blIconOver = new ImageIcon("blIconOverTest.png"); 
     lIconOver = new ImageIcon("lIconOverTest.png"); 
     tlIconOver = new ImageIcon("tlIconOverTest.png"); 
     tIconOver = new ImageIcon("tIconOverTest.png"); 
     trIconOver = new ImageIcon("trIconOverTest.png"); 
     cIconOver = new ImageIcon("rMouseOver.png"); 

     try{ 
      robot = new Robot(); 
     } catch (AWTException e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void componentResized(ComponentEvent e){ 
// 
    } 

    @Override 
    public void componentHidden(ComponentEvent e){ 
     // 
    } 

    @Override 
    public void componentShown(ComponentEvent e){ 
     // 
    } 

    @Override 
    public void componentMoved(ComponentEvent e){ 
     // 
    } 

    @Override 
    public void mouseEntered(MouseEvent e){ 
      JLabel label = (JLabel)e.getSource(); 
      String name = label.getName(); 

      if(name == "buttonSD"){ 
       robot.keyPress(KeyEvent.VK_S); 
       robot.keyPress(KeyEvent.VK_D); 
       origImg = buttonSD.getIcon(); 
       buttonSD.setIcon(brIconOver); 
      } else if(name == "buttonS"){ 
       robot.keyPress(KeyEvent.VK_S); 
       origImg = buttonS.getIcon(); 
       buttonS.setIcon(bIconOver); 
      } else if (name == "buttonWD"){ 
       robot.keyPress(KeyEvent.VK_D); 
       robot.keyPress(KeyEvent.VK_W); 
       origImg = buttonWD.getIcon(); 
       buttonWD.setIcon(trIconOver); 
      } else if(name == "buttonW"){ 
       robot.keyPress(KeyEvent.VK_W); 
       origImg = buttonW.getIcon(); 
       buttonW.setIcon(tIconOver); 
      } else if(name == "buttonWA"){ 
       robot.keyPress(KeyEvent.VK_W); 
       robot.keyPress(KeyEvent.VK_A); 
       origImg = buttonWA.getIcon(); 
       buttonWA.setIcon(tlIconOver); 
      }else if(name == "buttonA"){ 
       robot.keyPress(KeyEvent.VK_A); 
       origImg = buttonA.getIcon(); 
       buttonA.setIcon(lIconOver); 
      } else if(name == "buttonAS"){ 
       robot.keyPress(KeyEvent.VK_A); 
       robot.keyPress(KeyEvent.VK_S); 
       origImg = buttonAS.getIcon(); 
       buttonAS.setIcon(blIconOver); 
      } else if(name == "buttonD"){ 
       robot.keyPress(KeyEvent.VK_D); 
       origImg = buttonD.getIcon(); 
       buttonD.setIcon(rIconOver); 
      } else if(name == "CoordsLabel"){ 
       robot.keyRelease(KeyEvent.VK_A); 
       robot.keyRelease(KeyEvent.VK_W); 
       robot.keyRelease(KeyEvent.VK_S); 
       robot.keyRelease(KeyEvent.VK_D); 
      } 

       System.out.println(label); 
     } 

    @Override 
     public void mouseMoved(MouseEvent m){ 
     // 
    } 

     @Override 
    public void mouseDragged(MouseEvent e){ 
     // 
    } 

    @Override 
    public void mouseExited(MouseEvent e){ 
     robot.keyRelease(KeyEvent.VK_A); 
     robot.keyRelease(KeyEvent.VK_W); 
     robot.keyRelease(KeyEvent.VK_S); 
     robot.keyRelease(KeyEvent.VK_D); 
     if((JLabel)e.getSource() != CoordsLabel){ 
      JLabel tmpLabel = (JLabel)e.getSource(); 
      tmpLabel.setIcon(origImg); 
     } 
    } 

    @Override 
    public void mouseReleased(MouseEvent e){ 
     robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); 

    } 

    @Override 
    public void mousePressed(MouseEvent e){ 
     robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e){ 
     // 
    } 

    public static void main(String args[]){ 
     new GameController2(); 
    } 
} 
+0

你肯定BUTTON3_DOWN_MASK是右键点击?这听起来更像是鼠标中键,尝试用BUTTON2_DOWN_MASK – Dazak

+0

@Dazak至于我与awt.Robot记住:BUTTON2 - 中间,按键3 - 右 – ParkerHalo

+0

一切我已阅读说3 ... –

回答

0

其实,它是工作。

@Override 
public void mouseReleased(MouseEvent e){ 
    System.out.println("ReleasingMouseButton: " + e.getButton()); 
    robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); 

} 

@Override 
public void mousePressed(MouseEvent e){ 
    System.out.println("PressingMouseButton: " + e.getButton()); 
    robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); 
} 

现在,如果你点击一个标签,你会看到你会被困在点击释放事件循环:可如果你添加一些调试信息,这样可以看出。所以机器人实际上就像你想要的那样点击你(或者更确切地说你是这样设计的)。

片输出的:

ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 ReleasingMouseButton:3 PressingMouseButton:3 PressingMouseButton:3 PressingMouseButton:3 PressingMouseButton:3 PressingMouseButton:3 PressingMouseButton:3 PressingMouseButton: :3 PressingMouseButton:3

我怀疑这是你想要的,所以你需要一些额外的逻辑添加到它(例如,检查该鼠标按钮被点击)

+0

那么,如何让它发出右键点击该关注窗口? –

+0

我猜的Java不能因为它会出JVM的? –

+0

我认为你应该将你的鼠标按钮的使用目的机器人#的mouseMove然后单击并释放。 – Antoniossss