java - Java输入键与提交按钮相同吗?
问题描述
该程序应该做的是用回车键模仿“旋转”按钮。该程序可以运行并且不会崩溃,但 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,因为我从字母中过滤掉了数字,所以我会使用这个事件。不能让用户用字母下注吗?
解决方案
首先,不要KeyListener
用于此任务,JTextField
已经支持ActionListener
并且您也可以使用JRootPane
“默认按钮”支持,因此可以使用许多更好的解决方案。
您还应该利用(and ) 的actionComamnd
支持,这意味着您不必强制转换源代码,这更安全并且使解决方案更易于重用(因为它是解耦的)。ActionEvent
ActionListener
例如...
Play p = new Play();
spin = new JButton("Spin");
spin.setActionCommand(Play.COMMAND);
bet = new JTextField("");
bet.setActionCommand(Play.COMMAND);
spin.addActionListener(p);
bet.addActionListener(p);
//...
private static class Play implements ActionListener {
public static String COMMAND = "Spin";
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals(COMMAND)) {
//do something
}
}
}
或者,您可以使用现有Action
的 s API。这允许您设计一个自包含的工作单元,可以直接应用于许多 Swing 组件(已经支持ActionListener
API),但它们也是可自我配置的,整洁的......
private class SpinAction extends AbstractAction {
public SpinAction() {
putValue(NAME, "Spin");
}
@Override
public void actionPerformed(ActionEvent event) {
// Spin me baby
}
}
然后简单地应用它......
SpinAction action = new SpinAction();
spin = new JButton(action);
bet = new JTextField("");
bet.setAction(action);
有关更多详细信息,请参阅如何使用操作
推荐阅读
- c++ - char* 与 const char* (再次!!!)
- unity3d - 移动鼠标时长按按钮问题
- c# - sourcearray 不够长 C#
- laravel - 如何在 Laravel 中组合多个 where 查询
- ignite - GridGain Web 控制台用户创建自动化
- python - 在 Pandas 中用另一个不同长度的系列替换一个系列以获得多索引
- excel - 范围内的值的搜索框但留在列中
- android - 在启动 B 之前多次从活动 A 向 B 发送数据并显示所有数据发送
- kubernetes - 如何在 helm 中合并/覆盖值
- google-cloud-platform - BigQuery External GCS Table - 优化 Hive 分区策略