Ausgabezeichen wie Konversation mit JavaFX

Überblick

Als ich ein Spiel mit JavaFX erstellt habe, gab es eine Szene, in der "Label" ein Konversationsereignis anzeigen sollte, also werde ich darüber schreiben.

Umgebung

Ausführungsbeispiel

text.gif

Implementierung

Denkweise

Ich dachte, dass das, was ich diesmal versuchte, umgesetzt werden könnte, indem der Umfang der Offenlegung von Konversationssätzen Zeichen für Zeichen erweitert und jedes Mal ausgegeben wird.

Verfahren

  1. Erstellen Sie eine fxml-Datei (diesmal mit SceneBuilder)
  2. Erstellen Sie eine Datei zum Starten
  3. Erstellen Sie eine Datei zur Steuerung des Bildschirms (fügen Sie hier die Ausgabeverarbeitung hinzu).
  4. Ausführen

Erstellen einer fxml-Datei

Erstellen Sie einen Bildschirm mit "SceneBuilder". Dieses Mal habe ich ein "Label" und einen "Button" installiert, damit die Zeichen ausgegeben werden können. Da es einen Ort gibt, an dem der Controller eingestellt werden kann, habe ich diesmal "TestController" gewählt. Wenn Sie fertig sind, wählen Sie "Show Sample Controller Skelton" unter "Show" oder "View". Wenn der Controller-Skeleton-Code angezeigt wird, aktivieren Sie unten rechts "FULL", um das Ganze zu kopieren. Speichern Sie diese fxml diesmal unter dem Namen "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>   

Startdatei erstellen

Erstellen Sie eine Datei, um JavaFX zu starten. Sagen wir "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);
    }
}

Erstellen Sie eine Datei, um den Bildschirm zu steuern

Erstellen Sie abschließend eine Datei zur Steuerung des Bildschirms. Die obige Idee wird unter Verwendung von "Timeline" realisiert.

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("Der Knopf wurde gedrückt");
    }

    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("Drücke den Knopf");

    }
}

Sie können die Quelldatei auch unter [hier] anzeigen (https://github.com/Okupedia/conversation_events_JavaFX).

Lauf

Beim Kompilieren ist es einfacher, alle Java-Dateien im Verzeichnis mit * .java anzugeben. Nach dem Kompilieren können Sie es mit "Java Start" ausführen.

Recommended Posts

Ausgabezeichen wie Konversation mit JavaFX
HelloFX mit JavaFX
Frohe Weihnachten mit JavaFX !!
FizzBuzz mit Stream ausgeben
Ausgabe einer CSV-Datei mit offener CSV
Ausgabe neunundneunzig mit Stream
Steuerprotokollausgabe mit Doma2
[Hinweis] Szenenübergang mit JavaFX
Ausgabe "Izumi Oishi" mit Dokojava
Excel mit Formeln mit XlsMapper ausgeben