0

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

我必须只为该按钮设置单击按下事件或类似的东西?请帮我。

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);
    }
}
4

5 回答 5

1

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

问题 2 -JPanel不可聚焦,这意味着它永远无法获得键盘焦点。根据您的描述,我假设您正在使用 a KeyListener,这会导致

问题 3 - 使用KeyListener...KeyListener只会在它注册到的组件是可聚焦的并且具有焦点时响应关键事件。您可以通过使用Key Bindings来解决这个问题。

...解决方案...

  • 使用JLabel而不是JButton. 这将要求您向MouseListener标签注册 a 以接收鼠标点击通知,但它不会响应关键事件......
  • 更好的是,还要添加一个“开始”按钮......
于 2013-05-29T01:10:09.197 回答
0

你可以试试:

    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);
    }
}
于 2013-05-29T01:14:28.857 回答
0

这一行看起来像一个语法错误:

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

我认为应该是这样的:

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

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

-坦率

于 2013-05-29T01:14:37.713 回答
0
public void actionPerformed(ActionEvent e) {
    if("Exit".equals(e.getActionCommand())

System.exit(0); }

于 2014-09-08T09:02:18.393 回答
-1

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

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);  
           } 
        });
    }

}

于 2013-05-29T01:12:32.317 回答