Java异常:Java.lang.ClassCastException:javax.swing.Timer不能强制转换为javax.swing.JButton

Java异常:Java.lang.ClassCastException:javax.swing.Timer不能强制转换为javax.swing.JButton,java,swing,classcastexception,Java,Swing,Classcastexception,我真的不理解这个运行时错误: 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 JButto

我真的不理解这个运行时错误:

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()的类型
actionPerformed()

下一行
JButton按钮=(JButton)e.getSource()中您的问题
actionPerformed()方法中。因为您将
ButtonListener
添加到
JButton
Timer
。您可以为它们使用不同的侦听器,也可以验证
e.getSource()的类型actionPerformed()中的code>

摆动计时器也可以触发动作事件。您只需在代码中执行类检查:

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
    }
}

摆动计时器也可以触发动作事件。您只需在代码中执行类检查:

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
使用相同的侦听器类。为计时器创建一个单独的侦听器。

在actionPerformed方法中,检查
e.getSource()
是否是
JButton的实例

public void actionPerformed(ActionEvent e){
     if(e.getSource() instanceof JButton){
          // your button action logic
     }
}

不要对
JButtons
JTimer
使用相同的侦听器类。为计时器创建一个单独的侦听器。

放入所有相关代码。什么是e?这里似乎是
Exception
JButton按钮=(JButton)e.getSource()。显示当actionPerformed方法被调用时如何创建计时器?下面是创建计时器的代码:timer=new timer(10,new ButtonListener());为什么要将同一个侦听器添加到计时器和按钮中。为每一个创建不同的。计时器不是按钮。反之亦然。源当你添加它时,计时器是计时器,而不是按钮输入所有相关代码。什么是e?这里似乎是
Exception
JButton按钮=(JButton)e.getSource()。显示当actionPerformed方法被调用时如何创建计时器?下面是创建计时器的代码:timer=new timer(10,new ButtonListener());为什么要将同一个侦听器添加到计时器和按钮中。为每一个创建不同的。计时器不是按钮。反之亦然。添加时的源计时器是计时器,而不是按钮