第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在帶有動(dòng)畫的 JavaFX 應(yīng)用程序中為字符創(chuàng)建老虎機(jī)?

如何在帶有動(dòng)畫的 JavaFX 應(yīng)用程序中為字符創(chuàng)建老虎機(jī)?

UYOU 2022-05-12 16:37:08
我正在制作一個(gè) JavaFX 應(yīng)用程序。我在主窗口中有一個(gè)標(biāo)簽。我有一個(gè)從字母表生成隨機(jī)字符的方法,但我想給它添加一些動(dòng)畫。我的意思是在 2 秒內(nèi)在標(biāo)簽中旋轉(zhuǎn)字符,然后出現(xiàn)一些隨機(jī)字符。動(dòng)畫就像在真正的老虎機(jī)中一樣。我沒有找到任何這樣的圖書館我怎樣才能做到這一點(diǎn)?@FXML private Label answerID;//generate random character and apply it to the labelprivate void generateChar() {Random r = new Random();String alphabet = "ABCDEFGHIKLMNOPQRSTUXYZ";for (int i = 0; i < 25; i++) {  String text = "" + alphabet.charAt(r.nextInt(alphabet.length()));  answerID.setText(text);    }  }
查看完整描述

1 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

一個(gè)基本的設(shè)置可以包括一個(gè)Slot代表一個(gè)槽,由一個(gè)Text被扭曲的節(jié)點(diǎn)組成StackPane。

ASlot可以對 應(yīng)用動(dòng)畫Text并為其設(shè)置一個(gè)隨機(jī)字母。

ATilePane包含所有插槽,因此所有插槽都具有相同的大?。?/p>


import java.util.Random;

import javafx.animation.Interpolator;

import javafx.animation.SequentialTransition;

import javafx.animation.TranslateTransition;

import javafx.application.Application;

import javafx.geometry.Orientation;

import javafx.scene.Node;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.layout.BorderPane;

import javafx.scene.layout.StackPane;

import javafx.scene.layout.TilePane;

import javafx.scene.text.Text;

import javafx.stage.Stage;

import javafx.util.Duration;


public class FxTest extends Application {


    public  static final String ALFA_BET = "ABCDEFGHIKLMNOPQRSTUXYZ";

    private final Random rnd = new Random();

    private TilePane main;


    @Override

    public void start(Stage primaryStage)throws Exception{


        main = new TilePane(); //use tile pane: all tiles have same size

        main.setPrefColumns(ALFA_BET.length());

        main.setOrientation(Orientation.HORIZONTAL);

        main.setHgap(1);  main.setVgap(10); //vertical and horizontal space

        makeSlots();


        Button add = new Button("Spin");

        add.setOnAction(e -> spin());


        BorderPane root = new BorderPane(main);

        root.setBottom(add);

        Scene scene = new Scene(root);

        primaryStage.setScene(scene);

        //primaryStage.sizeToScene();

        primaryStage.show();

    }


    private void spin() {

        for(Node node : main.getChildren()){

            ((Slot)node).spin();

        }

    }


    private void makeSlots() {

        for (int i=0; i< ALFA_BET.length(); i++){

            main.getChildren().add(new Slot());

        }

    }


    public static void main(String[] args) {

        launch(null);

    }


    class Slot extends StackPane{


        private final Text text;

        private static final String format = "%1S";

        private static final double WIDTH = 30, TRANS_SIZE = 30;

        private SequentialTransition animation;


        Slot(){

            text = new Text();

            setRandomText();

            getChildren().add(text);

            setPrefWidth(WIDTH);

            //better apply using css

            setStyle("-fx-padding: 5;" +

                    "-fx-border-style: solid inside;" +

                    "-fx-border-width: 2;" +

                    "-fx-border-insets: 5;" +

                    "-fx-border-radius: 5;" +

                    "-fx-border-color: blue;"+

                    //all letters have the same width

                    "-fx-font-family: 'monospaced';");

            initializeAnimation();

        }


        //define animation to be applied to text

        private void initializeAnimation() {

            TranslateTransition t1 = new TranslateTransition();

            t1.setDuration(Duration.millis(1));

            t1.setNode(text);

            t1.setFromX(0);

            t1.setFromY(0);

            t1.setToX(0);

            t1.setToY(TRANS_SIZE);

            t1.setInterpolator(Interpolator.LINEAR);


            TranslateTransition t2 = new TranslateTransition();

            t2.setDuration(Duration.millis(300));

            t2.setNode(text);

            t2.setFromX(0);

            t2.setFromY(-TRANS_SIZE);

            t2.setToX(0);

            t2.setToY(TRANS_SIZE);

            t2.setInterpolator(Interpolator.LINEAR);


            TranslateTransition t3 = new TranslateTransition();

            t3.setDuration(Duration.millis(1));

            t3.setNode(text);

            t3.setFromX(0);

            t3.setFromY(TRANS_SIZE);

            t3.setToX(0);

            t3.setToY(0);

            t3.setInterpolator(Interpolator.LINEAR);

            //to play animations one by one

            animation = new SequentialTransition(t1, t2, t3);

        }


        void spin() {

            animation.play(); //animate

            animation.setOnFinished(e-> setRandomText()); //change letter whaen animation ends

        }

        void setRandomText(){

            char letter =  ALFA_BET.charAt(rnd.nextInt(ALFA_BET.length()));

            setText(letter );

        }


        void setText(char c){

            text.setText(String.format(format, c) );

        }

    }

}


查看完整回答
反對 回復(fù) 2022-05-12
  • 1 回答
  • 0 關(guān)注
  • 125 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)