JavaFX로 대화식으로 텍스트 내보내기

11235 단어 JavaFXJava

개요


자바 FX로 게임을 만들 때 Label 에서 대화 활동 장면을 보여주고 싶어서 이것에 대해 썼어요.

환경

  • java 13.0.2
  • JavaFX 13.0.2
  • zsh 5.7.1 (x86_64-apple-darwin19.0.0)
  • MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)
  • 실행 예



    실시


    사고 방법


    이번에 할 일은 대화문을 한 글자 한 글자 공개 범위를 넓혀 매번 출력하면 된다고 생각합니다.

    단계

  • fxml 파일 만들기(이번 사용SceneBuilder
  • 시작 파일 만들기
  • 화면 제어를 위한 파일 만들기(출력 처리 추가)
  • 실행
  • 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 실행할 수 있습니다.

    좋은 웹페이지 즐겨찾기