2016-03-23 9 views
1

Dies ist Teil meines Codes und es funktioniert nicht, weil es immer sagt, dass es das Symbol in meinem ActionListener nicht finden kann. Ich weiß nicht, wie ich es zum Laufen bringen soll.Timer und JSlider mit Bildern

Also im Grunde, was ich versuche die Schieber Länder zu tun ist, um die Bilder von 1-8.png Zuge zu machen, je nachdem, wo und IDK, wie:

private static JLabel value; 
private static ImageIcon image; 
private static Timer timer; 
private static final int delay = 2000; 
private static int newDelay; 
private static int i = 1; 

    timer = new Timer(delay, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     // makes the image at i appear and then goes to 2 and so on until i i = 8 and will return a 1 after. Will keep on doing so         
      value.setIcon(new ImageIcon(i + ".png")); 
      i++; 

      if(i == 8) { 
      i = 1; 
      } 
     } 
    }); 
    timer.start(); 


} 


private static class SliderChange implements ChangeListener { 

    public void stateChanged(ChangeEvent event) { 

     JSlider source = (JSlider) event.getSource(); 
     // while it is adjusting timer stops and gets the value of where the slider hits and the newDelay will be the new timer time. (So if they drag slider to 6, delay(which is 2000) will be divided by 6 to get new time 
     if (!source.getValueIsAdjusting()) { 
      timer.stop(); 
      value.setIcon(new ImageIcon(i + ".png")); 
      newDelay = (delay/(int)source.getValue()); 
      timer = new Timer(newDelay, new Actionlistener()); 
      timer.start(); 
     } 

    } 

} 

Aber das funktioniert nicht. Wie kann ich es reparieren?

Es weist auf diese Linie sagen, es ist ein Fehler:

timer = new Timer(newDelay, new Actionlistener()); 
+1

ist verwirrend Nicht sicher, ob Sie jedes Mal einen neuen "Timer" erstellen müssen, vielleicht den aktuellen Timer stoppen und einfach die Verzögerung ändern und neu starten. Das Problem ist 'new ActionListener())' versucht, eine Instanz einer 'Schnittstelle' zu ​​erzeugen, ohne die Anforderungen der besagten' Schnittstelle' zu ​​implementieren – MadProgrammer

Antwort

1

Ich bin mir nicht sicher, ob es wirklich notwendig, die Timer jedes Mal neu zu erstellen. Stattdessen stoppen sie, setzen sie delay Eigenschaft ist und neu starten statt

private static class SliderChange implements ChangeListener { 

    public void stateChanged(ChangeEvent event) { 

     JSlider source = (JSlider) event.getSource(); 
     // while it is adjusting timer stops and gets the value of where the slider hits and the newDelay will be the new timer time. (So if they drag slider to 6, delay(which is 2000) will be divided by 6 to get new time 
     if (!source.getValueIsAdjusting()) { 
      timer.stop(); 
      value.setIcon(new ImageIcon(i + ".png")); 
      newDelay = (delay/(int)source.getValue()); 
      timer.setDelay(newDelay); 
      timer.start(); 
     } 

    } 

} 

Das Problem ist timer = new Timer(newDelay, new Actionlistener()); versucht, eine Instanz eines interface ohne die Umsetzung der Anforderungen des interface zu schaffen, die dem Compiler