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.
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.
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>
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 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).
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