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 화면을 만듭니다.이번에는 문자를 출력하는 공간LabelButton을 각각 설치했다.
    컨트롤러를 설정한 곳이 있기 때문에 이번에는 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 실행할 수 있습니다.

    좋은 웹페이지 즐겨찾기