【发布时间】:2020-03-31 22:20:32
【问题描述】:
程序应该做的是用回车键模仿“旋转”按钮。该程序可以运行并且不会崩溃,但 Eclipse 控制台在线程“AWT-EventQueue-0”中给了我一个“异常”java.lang.ClassCastException:javax.swing.JTextField 无法转换为 javax。 swing.JButton" 错误。
//.. gui code
spin = new JButton("Spin");
bet = new JTextField("");
play p = new play();
spin.addActionListener(p);
keys k = new keys();
bet.addKeyListener(k);
}
private class play implements ActionListener{
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
if(src.equals(spin)) {
//do something
}
}
private class keys implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
char c= e.getKeyChar();
if(c == KeyEvent.VK_ENTER) {
spin.doClick();
}
}
//.. the other override methods
}
编辑
- 还有 2 个按钮,我只是没有包含它们,因为它们工作正常且功能不同。
- JTextField 有一个 KeyListener,因为我从字母中过滤掉了数字,所以我会使用该事件。不能让用户用字母下注吧?
【问题讨论】:
-
JTextFields 也可以有 ActionListeners。当您在文本字段中按下回车键时,将调用这些动作侦听器。因此,您可以在文本字段和按钮上添加相同的 ActionListener,而无需检查源是什么。即使有,也不需要将 is 转换为 JButton。
-
在这种情况下不要使用
KeyListener,它不适合您想要实现的目标 -
另外,使用
actionCommand属性而不是强制转换源,它通常更安全 -
@MadProgrammer 你真的是一个疯狂的程序员。我摆脱了
JButton铸造并用动作命令替换了条件并且没有错误。但是我还有KeyListener,可以吗? -
@asdf “但是我还有 KeyListener,可以吗?” - 不,不是真的。除了
JTextField支持ActionListener之外,您不能保证 [Enter] 将成为每个平台的“操作”键。作为一般指南,KeyListener永远不应应用于文本字段 - 还有其他更好的解决方案可供使用
标签: java swing actionlistener