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