Остановка анимации по клику - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день! Пишу диплом по граф дизайну и пришлось столкнуться в программированием, хотя полный ноль в этом. Нужно сделать анимацию - зацикленная смена нескольких картинок (по сути gif). По клику на определенную картинку анимация останавливается на этой картинке и раскрывается дополнительная текстовая информация. По повторному клику запускается заново. И так для каждой из картинок. Господа разработчики, помогите плииииз!

Решение задачи: «Остановка анимации по клику»

textual
Листинг программы
package base;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;
 
 
 
public class test
{
    public File soundGame = new File("data/gameSound.wav");
    public Clip clip;
    public JFrame window = new JFrame("Super Owl");
    private JButton bt = new JButton();
    public JPanel myCartoon = new JPanel();
    public AudioInputStream inAudio;
    public String[] arrCartoon = new String[] {"data/0.png", "data/1.png", "data/2.png", "data/3.png", "data/4.png"
            , "data/5.png", "data/6.png", "data/7.png", "data/8.png", "data/9.png", "data/10.png"
            , "data/11.png", "data/12.png", "data/13.png", "data/14.png", "data/15.png"
            , "data/16.png", "data/17.png", "data/18.png", "data/19.png", "data/20.png"
            , "data/21.png", "data/22.png", "data/23.png"};
    public JLabel[] cartoonItem = new JLabel[arrCartoon.length];
    public int fps = 15;
    private int timeLine = 0;
    private Timer fpsTimer;
    public int mouseControl = 1;
    
    
    
    public test()
    {
        window.setSize(500, 500);   
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setBackground(Color.black);
        window.setLayout(null);
        window.setResizable(false);
        window.setLocationRelativeTo(null);
 
        soundConstuctor();
        cartoonConstructor();
        makeButton();
        
        window.setVisible(true);
    }
    
    
    public void cartoonConstructor()
    {
        myCartoon.setBounds(0, 0, 500, 500);
        myCartoon.setBackground(new Color(0,0,0,0));
        myCartoon.setLayout(null);
        myCartoon.setOpaque(false);
        
        for (int i = 0; i < arrCartoon.length; i++)
        {
            cartoonItem[i] = new JLabel();
            cartoonItem[i].setBounds(0, 0, 500, 500);
            ImageIcon enemyPic = new ImageIcon(arrCartoon[i]);
            cartoonItem[i].setIcon(enemyPic);
            cartoonItem[i].setHorizontalAlignment(SwingConstants.CENTER);
            cartoonItem[i].setLayout(null);
            cartoonItem[i].setVisible(false);
            cartoonItem[i].setOpaque(false);
            
            myCartoon.add(cartoonItem[i]);
        }
        
        window.add(myCartoon);
        window.repaint();
    }
    
    
    public void soundConstuctor()
    {
        try
        {
            inAudio = AudioSystem.getAudioInputStream(soundGame);
            clip = AudioSystem.getClip();
            clip.open(inAudio);
            clip.stop();
            
            FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
            gainControl.setValue((float) 1.0);
        } 
        catch (Exception e)
        {
            //...
        }
    }
    
    
    public void makeButton()
    {
        bt.setFont(new Font("Courier New", Font.PLAIN | Font.BOLD, 20));
        bt.setMargin(new Insets(0,0,0,0));
        bt.setBounds(170, 400, 160, 30);
        bt.setText("Start");
        bt.setLayout(null);
        bt.setFocusable(false);
        
        window.add(bt);
        
        ActionListener actionListener = new GoListener();
        bt.addActionListener(actionListener);
    }
    
    
    public class GoListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            soundStart();
            cartoonStart();
        }
    }
    
    
    private void cartoonStart()
    {         
        fpsTimer = new Timer(fps, new fpsListener());
        fpsTimer.start();
    }
    
    
    public class fpsListener implements ActionListener
    {       
        public void actionPerformed(ActionEvent e)
        {  
            timeLine++;
            
            if (timeLine > 0 && timeLine < arrCartoon.length)
            {
                cartoonItem[timeLine - 1].setVisible(false);
                cartoonItem[timeLine].setVisible(true);
            }
 
            if (timeLine == arrCartoon.length - 1)
            {
                timeLine = 0;
                cartoonItem[arrCartoon.length - 1].setVisible(false);
                cartoonItem[timeLine].setVisible(true);
            }
            
            window.repaint();
            //System.out.println(timeLine);
        }    
    }
    
    
    public void soundStart()
    {
        bt.setVisible(false);
        window.addMouseListener(new CustomListener());
        
        try
        {
            clip.loop(Clip.LOOP_CONTINUOUSLY);
            clip.setFramePosition(0);
            clip.start();
        } 
        catch (Exception ex)
        {
            //...
        }
    }
    
    public class CustomListener implements MouseListener
    {
        public void mousePressed(MouseEvent e)
        {
            mouseControl *= -1;
            if (mouseControl == -1)
            {
                fpsTimer.stop();
                System.out.println("я картинка саким номером" + timeLine);
                
                //здесь ставте условия что должно происхдить по нужномуномеру картинки
            }
            else
            {
                fpsTimer.start();
            }
        }
 
        @Override
        public void mouseClicked(MouseEvent e)
        {
            // TODO Auto-generated method stub
        }
 
        @Override
        public void mouseEntered(MouseEvent e)
        {
            // TODO Auto-generated method stub
        }
 
        @Override
        public void mouseExited(MouseEvent e)
        {
            // TODO Auto-generated method stub
        }
 
        @Override
        public void mouseReleased(MouseEvent e)
        {
        // TODO Auto-generated method stub
        }
    }
    
    
    public static void main(String[] args) 
    {
        new test();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5