[英]Enable only mouse event over a jbutton - Disable keyboard event for jbutton
我有个问题。 我创造了一个游戏。 当我打开它时,我必须按Enter键才能开始游戏(只需输入)。 现在,我用一个名为“退出游戏”的按钮升级了游戏。 我不知道为什么我的Enter键由于这个按钮而不再起作用。 如果我将其删除,则可以再次按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);
}
}
问题1- JButton
是UI中唯一可聚焦的组件。 因此,当您开始编程时,它将获得默认焦点。 虽然具有默认焦点。 它将消耗Enter键。
问题2- JPanel
无法聚焦,这意味着它永远无法获得键盘聚焦。 根据您的描述,我假设您使用的是KeyListener
,这会导致
问题3-使用KeyListener
... KeyListener
仅在其注册到的组件可聚焦并具有焦点时才响应键事件。 您可以使用Key Bindings克服这一点。
...解决方案...
JLabel
而不是JButton
。 这将需要您在标签上注册一个MouseListener
,以接收有关鼠标单击的通知,但它不会响应按键事件。 你可以试试:
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);
}
}
这行看起来像语法错误:
add(new JButton("Exit Game"));
{
ExitGame.addActionListener(this);
}
我认为应该是这样的:
ExitGame= new JButton("Exit");
this.add(ExitGame);
ExitGame.addActionListener(this);
我没有测试过,但是我认为通过一些调整,您应该能够使它完成您想要的操作。 希望能成功!
-坦率
public void actionPerformed(ActionEvent e) {
if("Exit".equals(e.getActionCommand())
System.exit(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);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.