JavaFX로 대화식으로 텍스트 내보내기
개요
자바 FX로 게임을 만들 때 Label 에서 대화 활동 장면을 보여주고 싶어서 이것에 대해 썼어요.
환경
실행 예
실시
사고 방법
이번에 할 일은 대화문을 한 글자 한 글자 공개 범위를 넓혀 매번 출력하면 된다고 생각합니다.
단계
fxml 파일 만들기
SceneBuilder 화면을 만듭니다.이번에는 문자를 출력하는 공간Label과 Button을 각각 설치했다.컨트롤러를 설정한 곳이 있기 때문에 이번에는
TestController로 설정했다.완료되면
表示 또는 View 중에서 サンプル・コントローラ・スケルトン 또는 Show Sample Controller Skelton 을 선택합니다.컨트롤러의 뼈대 코드를 표시한 후 오른쪽 아래에 있는
FULL 을 선택하여 전체를 복사합니다.이번에는
Test.fxml 이름으로 이 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>
시작 파일 만들기
JavaFX를 시작할 파일을 만듭니다.
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);
}
}
화면 제어를 위한 파일 만들기
마지막으로 화면을 제어하는 파일을 만듭니다.
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("ボタンが押されました");
}
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("ボタンを押してください");
}
}
소스 파일도 여기 에서 볼 수 있습니다.실행
컴파일할 때
*.java 디렉터리에 있는 모든 자바 파일을 지정하면 쉽습니다.컴파일된 후
java Start 실행할 수 있습니다.
Reference
이 문제에 관하여(JavaFX로 대화식으로 텍스트 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Okupedia/items/087e27c25c5b0109a1a0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)