[英]Java exception: java.lang.ClassCastException: javax.swing.Timer cannot be cast to javax.swing.JButton
我真的不明白这个运行时错误:
java.lang.ClassCastException:无法将javax.swing.Timer强制转换为javax.swing.JButton。
这是我的代码:
timer = new Timer(DELAY, new ButtonListener());
private JButton[] buttons = new JButton[3];
buttons[0] = new JButton("Circle");
buttons[1] = new JButton("Start");
buttons[2] = new JButton("Stop");
for(JButton button : buttons){
button.addActionListener(new ButtonListener());
controlPanel.add(button);
}
public void actionPerformed(ActionEvent e){
JButton button = (JButton) e.getSource();
if(button.getText().equals("Start")){
timer.start();
}else
if(button.getText().equals("Stop")){
timer.stop();
}else
if(button.getText().equals("Circle")){
shapes[count] = new Circle();
drawPanel.repaint();
count++;
}
}
下一行中的问题JButton button = (JButton) e.getSource();
在actionPerformed()
方法中。 因为您将ButtonListener
添加到JButton
和Timer
。 您可以为它们使用不同的侦听器,或者可以验证e.getSource();
类型e.getSource();
在actionPerformed()
摇摆计时器也可以触发动作事件。 您只需要在代码中进行类检查:
public void actionPerformed(ActionEvent e){
if (e.getSource() instanceof (JButton)) {
JButton button = (JButton) e.getSource();
if(button.getText().equals("Start")){
timer.start();
}else
if(button.getText().equals("Stop")){
timer.stop();
}else
if(button.getText().equals("Circle")){
shapes[count] = new Circle();
drawPanel.repaint();
count++;
}
}else (e.getSource() instanceof (Timer)) {
//deal with timer
}
}
在您的actionPerformed方法中,检查e.getSource()
是否为JButton
的实例,否则不进行处理
public void actionPerformed(ActionEvent e){
if(e.getSource() instanceof JButton){
// your button action logic
}
}
不要对JButtons
和JTimer
使用相同的侦听器类。 为您的计时器创建一个单独的侦听器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.