0 / 0 / 0
Регистрация: 16.11.2023
Сообщений: 1
1

JavaFX проблема с анимацией

16.11.2023, 19:53. Показов 563. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема заключается в поломке последовательности слайдов. Происходит это если задать скорость, нажать старт, и после стоп. Если не поменять время и нажать снова кнопку старт то последовательность фотографий ломается.
Agreagate
Java
1
2
3
4
5
package com.example.iterator;
 
public interface Agreagate {
    public Iterator getIterator();
}
HelloApplication
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.iterator;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
import java.io.IOException;
 
public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 600, 600);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }
 
    public static void main(String[] args) {
        launch();
    }
}
HelloController
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.example.iterator;
 
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.util.Duration;
 
public class HelloController {
 
    public ImageView ImageView;
    public Imageg conaggr = new Imageg("");
    public Iterator iter = conaggr.getIterator();
    Timeline time = new Timeline();
    private int speed = 0;
    @FXML
    TextField temp = new TextField();
    @FXML
    public void onNextClick(ActionEvent actionEvent) {
        if(iter.hasNext(1))
        ImageView.setImage((Image)
                iter.next());
        else {ImageView.setImage((Image) iter.preview());}
    }
    @FXML
    public void onBackClick(ActionEvent actionEvent) {
        if(iter.hasNext(-1))
            ImageView.setImage((Image)
                    iter.back());
        else {ImageView.setImage((Image) iter.preview());}
    }
 
    @FXML
    protected void onStartClick() {
        speed = Integer.parseInt(temp.getText());
        time.setCycleCount(Timeline.INDEFINITE);
        time.getKeyFrames().add(new KeyFrame(Duration.seconds(speed), new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                if (iter.hasNext(1)){
                    ImageView.setImage((Image)
                            iter.next());}
                else {ImageView.setImage((Image) iter.preview());}
            }
        }));
        time.play();
    }
    public void onStopClick(ActionEvent actionEvent) {
        time.stop();
        time.getKeyFrames().clear();
    }
}
Imageg
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.example.iterator;
 
import javafx.scene.image.Image;
import java.io.File;
import java.nio.file.Paths;
 
public class Imageg implements Agreagate {
    private String filetop;
 
    public Imageg(String filetop) {
        this.filetop = filetop;
    }
    @Override
    public ImageIterator getIterator() {
        return new ImageIterator();
    }
 
    public class ImageIterator implements Iterator {
        private int count = 0;
 
        private Image getImage(int iterator) {
            String filename = Paths.get("src/main/resources/" + filetop + iterator + ".jpg").toUri().toString();
            return new Image(filename);
        }
        @Override
        public boolean hasNext(int i) {
            return
                    !getImage(count+i).isError();
        }
        @Override
        public Image next() {
            if (this.hasNext(1)){
                return getImage(++count);
            }
                count = 1;
                return getImage(count);
        }
        @Override
        public Image back() {
            if (this.hasNext(-1)){
                return getImage(--count);
            }
            return getImage(count);
        }
        @Override
        public Image preview() {
            return getImage(count);
        }
    }
}
Iterator
Java
1
2
3
4
5
6
7
8
9
10
package com.example.iterator;
 
import javafx.scene.image.Image;
 
public interface Iterator {
    public boolean hasNext(int i);
    public Image next();
    public Image back();
    public Image preview();
}
helloview.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
 
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
 
<VBox alignment="CENTER" prefHeight="400.0" prefWidth="366.0" spacing="20.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.iterator.HelloController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
    </padding>
   <children>
      <Label text="Введите скорость (секунды) " />
      <TextField fx:id="temp" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="90.0" />
      <ImageView fx:id="ImageView" fitHeight="268.0" fitWidth="272.0" pickOnBounds="true" preserveRatio="true" />
      <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="25">
         <children>
            <Button fx:id="nextbtn" mnemonicParsing="false" onAction="#onNextClick" text="Вперёд" />
            <Button fx:id="backbtn" mnemonicParsing="false" onAction="#onBackClick" text="Назад" />
            <Button fx:id="start" alignment="CENTER" mnemonicParsing="false" onAction="#onStartClick" text="Старт">
            </Button>
            <Button fx:id="stopbtn" mnemonicParsing="false" onAction="#onStopClick" text="Стоп" />
         </children>
      </HBox>
   </children>
</VBox>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2023, 19:53
Ответы с готовыми решениями:

Проблемы с анимацией JavaFX
Здравствуйте, animationTimer почему-то суммирует скорости всех планет и они двигаются с одинаковой...

Проблема с модульностью в JavaFX
Всем привет! Возникла следующая проблема. Я сделал из одного своего проекта файл типа .jar,...

Проблема с подключением JavaFX
Не работает JavaFx в IntelliJ IDEA, JDK установлен. И IntelliJ IDEA и JDK последняя версия, папку...

Проблема с применением метода в JavaFX
Здравствуйте ! У меня есть кнопка, при клике на которую выводится значение переменной n. ...

Проблема с запуском jar JAVAFX
После создание джарника javafx даблкликом ничего не происходит. Попробовал через батник пишет...

0
16.11.2023, 19:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2023, 19:53
Помогаю со студенческими работами здесь

JavaFX. Самое первое задание в JavaFX вместо Java. Не используя вспомогательных объектов
Всем привет, уважаемые форумчане! Мы работали на программировании в вузе на Java. Теперь дали...

Проект JavaFX в Eclipse не видит библиотеки из javafx-sdk
Доброго всем времни суток. Помогите решить вот такую проблемку. Установил среду Eclipse. В ней...

Проблема с анимацией
Запускаю игру вроде все нормально все работает , как только начинаю двигаться , мой персонаж...

Проблема с анимацией
Доброго времени суток, форумчане! Делаю небольшой проект, в котором мне надо было сделать...

Проблема с анимацией (в 2D)
У меня есть персонаж на котором проигрывается анимация, но когда не останавливая анимацию, я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru