gpt4 book ai didi

java - 关键事件不起作用

转载 作者:行者123 更新时间:2023-11-29 03:19:49 27 4
gpt4 key购买 nike

我正在练习事件并想设置它,所以我有一个类可以响应按钮和按键,它编译很好,但关键事件根本不调用方法/工作。

这是类:

class CircleListener extends KeyAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == nlrg_button) canvas.enlarge();
else if (e.getSource() == shrink_button) canvas.shrink();
else if (e.getSource() == superenlarger_button) canvas.enlargeAlot();
else if (e.getSource() == supershrinker_button) canvas.shrinkAlot();

repaint();
}
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN: canvas.circleDown(); break;
case KeyEvent.VK_UP: canvas.circleUp(); break;
case KeyEvent.VK_LEFT: canvas.circleLeft(); break;
case KeyEvent.VK_RIGHT: canvas.circleRight(); break;
}
repaint();
}
}

这是实例化+注册:

CircleListener listener = new CircleListener();

// Bind buttons with respective eventlistener class
nlrg_button.addActionListener(listener);
shrink_button.addActionListener(listener);
superenlarger_button.addActionListener(listener);
supershrinker_button.addActionListener(listener);
// Bind canvas to keylistener class
canvas.addKeyListener(listener);

他们尝试调用的方法存在并按预期工作,我通过在询问之前使用按钮调用它们来确保这一点。

为什么它不起作用/我错过了什么? & 有没有更高效的形式?

最佳答案

Why is it not working/what am I missing?

KeyEvents 只发送给有焦点的组件。由于您的面板上有许多组件,因此面板永远不会有焦点。你不应该为此使用 KeyEvents。

I had a class that responded to both button and key presses

这是一个很好的设计,但是您不应该为此使用 KeyEvents。相反,您应该使用 Key Bindings

当您使用键绑定(bind)时,您可以在按钮和 KeyStroke 之间共享操作。阅读 How to Use Key Bindings 上的 Swing 教程部分获取更多信息和示例。

使用 Actions 构建您的应用程序是一个很好的设计。本教程还有一个关于 How to Use Action 的部分,您应该查看。所有 Swing 组件都使用 Actions 和 Key Bindings。您可以查看键绑定(bind)以了解 Swing 组件的默认绑定(bind)以及一些使用键绑定(bind)的示例代码。

关于java - 关键事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com