仅通过jbutton启用鼠标事件 - 禁用jbutton的键盘事件

时间:2013-05-29 00:58:49

标签: java class netbeans jbutton netbeans-7

我有问题。 我创造了一个游戏。当我打开它时,我必须按ENTER开始游戏(只需输入)。 现在我用一个名为“EXIT GAME”的按钮升级了游戏。由于这个按钮,我不知道为什么我的回车键不再起作用。如果我删除它,那么我可以再次按回车并玩游戏。

我必须只设置点击按下事件到那个按钮或类似的东西?请帮帮我。

public class LeftPanel extends JPanel implements ActionListener {
    JButton ExitGame;

    public LeftPanel(Tetris tetris) {
        this.tetris = tetris;
        setPreferredSize(new Dimension(400, 480));
        setBackground(Color.getHSBColor(17f, 0.87f, 0.52f));
        add(new JButton("Exit Game"));
        {
            ExitGame.addActionListener(this);
        }
    }

    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}

5 个答案:

答案 0 :(得分:2)

问题1 - JButton是UI中唯一可聚焦的组件。因此,当您开始编程时,它会获得默认的聚焦。虽然它有默认焦点。它将消耗 Enter 键击。

问题2 - JPanel无法集中注意力,这意味着它永远无法获得关键板焦点。根据您的描述,我假设您使用的是KeyListener,这会导致

问题3 - 使用KeyListener ... KeyListener只会在注册的组件具有焦点并且具有焦点时才会响应关键事件。您可以使用Key Bindings来完成此操作。

...解...

  • 使用JLabel代替JButton。这将要求您在标签上注册MouseListener以便接收鼠标点击的通知,但它不会响应关键事件......
  • 更好的是,还添加一个“开始”按钮......

答案 1 :(得分:1)

您可以尝试:

    public class LeftPanel extends JPanel implements ActionListener {


    public LeftPanel(Tetris tetris) {
        this.tetris = tetris;
        setPreferredSize(new Dimension(400, 480));
        setBackground(Color.getHSBColor(17f, 0.87f, 0.52f));
        JButton ExitGame = new JButton("Exit Game");
        ExitGame.addActionListener(this);
        ExitGame.setActionCommand("Exit");
        add(ExitGame );

    }

    public void actionPerformed(ActionEvent e) {
        if("Exit".equals(e.getActionCommand())
            System.exit(0);
    }
}

答案 2 :(得分:1)

此行看起来像语法错误:

add(new JButton("Exit Game"));
    {
        ExitGame.addActionListener(this);
    }

我认为它应该是这样的:

ExitGame= new JButton("Exit");
this.add(ExitGame);
ExitGame.addActionListener(this);

我没有对此进行过测试,但我认为通过一些调整,你应该能够做到你想做的事情。我希望有效!

-Frank

答案 3 :(得分:1)

public void actionPerformed(ActionEvent e) {
    if("Exit".equals(e.getActionCommand())

System.exit(0);     }

答案 4 :(得分:0)

由于ActionlListener可以由鼠标和键盘触发,但现在用户只想响应鼠标事件,因此将动作侦听器更改为mouselistener。经过测试并通过。

public class LeftPanel extends JPanel implements ActionListener {
    JButton ExitGame;

    public LeftPanel(Tetris tetris) {
        this.tetris = tetris;
        setPreferredSize(new Dimension(400, 480));
        setBackground(Color.getHSBColor(17f, 0.87f, 0.52f));
        ExitGame= new JButton("Exit Game")
        add(ExitGame);
        ExitGame.addMouseListener(new MouseAdapter() {
           public void mouseClicked(MouseEvent e) {
               System.exit(0);  
           } 
        });
    }

}