Остановка анимации по клику - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д