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.
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.
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é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);
}
}
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.
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