【发布时间】:2012-08-28 23:08:34
【问题描述】:
在我的应用程序中,我使用默认按钮。我希望它在ENTER 密钥发布时做出反应。当ENTER 键被按下时不会。
我从按钮的InputMap 中删除了KeyStroke。但这对我不起作用。我该怎么做?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class ButtonTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
buildFrame();
}
});
}
private static void buildFrame() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton button = new JButton(new AbstractAction("Button") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ButtonTest::actionPerformed: CALLED");
}
});
JButton button2 = new JButton("Button 2");
InputMap im = button.getInputMap();
im.put(KeyStroke.getKeyStroke("ENTER"), "none");
im.put(KeyStroke.getKeyStroke("released ENTER"), "released");
f.setLayout(new GridBagLayout());
f.add(button);
f.add(button2);
f.getRootPane().setDefaultButton(button);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
这是示例代码。
【问题讨论】:
-
发布部分代码...我可以轻松获得您的解决方案...
-
KeyReleased 和 KeyPressed 有什么区别,因为这个 JButton 必须从键盘接收一次 ENTER KeyEvent,你的意思是重复触发相同的动作直到 ENTER ... ???,
-
在我按下触发“搜索”按钮的 Textfiled 上的 Enter 后,将显示在我的应用程序对话框中。如果我长时间按住 ENTER 键,则显示的对话框会自动关闭。因为它有默认按钮。
-
你想防止来自
ENTER的多人游戏事件(在你的情况下)???ENTER键的动作应该只触发一次???,新动作应该只在下一个 keyPressed 时触发???
标签: java swing event-handling defaultbutton