Caractères de sortie comme une conversation avec JavaFX

Aperçu

Quand j'ai créé un jeu avec JavaFX, il y avait une scène où je voulais que «Label» affiche un événement de conversation, donc j'écrirai à ce sujet.

environnement

Exemple d'exécution

text.gif

la mise en oeuvre

Façon de penser

Je pensais que ce que j'essayais de faire cette fois pourrait être mis en œuvre en élargissant la portée de la divulgation des phrases conversationnelles caractère par caractère et en les générant à chaque fois.

procédure

  1. Créez un fichier fxml (cette fois en utilisant SceneBuilder)
  2. Créez un fichier pour commencer
  3. Créez un fichier pour contrôler l'écran (ajoutez le traitement de sortie ici)
  4. Exécutez

Créer un fichier fxml

Créez un écran avec SceneBuilder. Cette fois, j'ai installé un "Label" et un "Button", qui sont des espaces pour la sortie de caractères. Puisqu'il y a un endroit pour régler le contrôleur, j'ai choisi «TestController» cette fois. Lorsque vous avez terminé, sélectionnez Show Sample Controller Skelton dans Show ou View. Lorsque le code squelette du contrôleur est affiché, cochez «FULL» en bas à droite pour copier le tout. Enregistrez cette fois ce fxml sous le nom «Test.fxml».

Test.fxml


<?xml version="1.0" encoding="UTF-8"?>    
    
<?import javafx.scene.control.Button?>    
<?import javafx.scene.control.Label?>    
<?import javafx.scene.layout.Pane?>    
   
    
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="TestController">        
   <children>    
      <Label fx:id="textLabel" layoutX="148.0" layoutY="102.0" prefHeight="120.0" prefWidth="305.0" />    
      <Button fx:id="button" layoutX="260.0" layoutY="292.0" mnemonicParsing="false" onAction="#buttonOnAction" prefHeight="48.0" prefWidth="82.0" />        
   </children>    
</Pane>   

Créer un fichier de démarrage

Créez un fichier pour démarrer JavaFX. Disons «Start.java».

Start.java


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.*;
import javafx.scene.Scene;
import javafx.scene.Parent;

public class Start extends Application {
    private Scene startScene;

    @Override
    public void start(Stage primaryStage) throws Exception {
	    primaryStage.setTitle("test");
	    startScene = new Scene(FXMLLoader.load(getClass().getResource("Test.fxml")));
	    primaryStage.setScene(startScene);
	    primaryStage.setResizable(false);
	    primaryStage.show();
    }

    public static void main(String args[]) {
	    launch(args);
    }
}

Créer un fichier pour contrôler l'écran

Enfin, créez un fichier pour contrôler l'écran. L'idée ci-dessus est réalisée en utilisant Timeline.

TestController.java


import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.util.Duration;

public class TestController {
    private int i;

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Label textLabel;

    @FXML
    private Button button;

    @FXML
    void buttonOnAction(ActionEvent event) {
        showText("Le bouton a été enfoncé");
    }

    void showPerText(String showText, int i){
        textLabel.setText(showText.substring(0, i));
    }

    void showText(String showText){
        i = 0;
        Timeline timeline = new Timeline(
                new KeyFrame(
                        new Duration(100),
		    /*
		       new EventHandler<ActionEvent>(){
		       @Override
		       public void handle(ActionEvent event){
		       i+=1;
		       showPerText(showText, i);
		       }
		       }
		       */
                        (event) -> {
                            i+=1;
                            showPerText(showText, i);
                        }
                )
        );
        timeline.setCycleCount(showText.length());
        timeline.play();
    }

    @FXML
    void initialize() {
        assert textLabel != null : "fx:id=\"textLabel\" was not injected: check your FXML file 'Test.fxml'.";
        assert button != null : "fx:id=\"button\" was not injected: check your FXML file 'Test.fxml'.";
        textLabel.setText("Appuyez sur le bouton");

    }
}

Vous pouvez également voir le fichier source depuis ici.

Exécuter

Lors de la compilation, il est plus facile de spécifier tous les fichiers java du répertoire avec * .java. Après la compilation, vous pouvez l'exécuter avec java Start.

Recommended Posts

Caractères de sortie comme une conversation avec JavaFX
HelloFX avec JavaFX
Joyeux Noël avec JavaFX !!
Sortie FizzBuzz avec flux
Sortie de fichier csv avec csv ouvert
Sortie CSV par Apache Commons CSV
Sortie quatre-vingt-dix-neuf avec Stream
Contrôle de la sortie du journal avec Doma2
[Note] Transition de scène avec JavaFX
Sortie "Izumi Oishi" avec dokojava
Sortie d'Excel avec des formules avec XlsMapper