Доступ к TextArea - JavaFX, Java 8 - PullRequest
       15

Доступ к TextArea - JavaFX, Java 8

0 голосов
/ 28 февраля 2019

У меня проблемы с получением доступа к FXML TextArea.

Main.java:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
}


    public static void main(String[] args) {
        launch(args);
    }
}

Controller.java:

package sample;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {

    @FXML
    private TextArea textArea;

    @Override
    public void initialize(URL location, ResourceBundle resources){
        new ClientRead().start();//creating and running new thread
    }

    void refreshTextArea(String text){
        if (text != null){
            this.textArea.setText(text);
        }
    }

}

ClientRead.java:

package sample;

import javafx.fxml.FXMLLoader;

import java.io.IOException;

public class ClientRead extends Thread {

    public void run(){
        refreshTextArea("content");
    }

    private void refreshTextArea(String text){

        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(getClass().getResource("sample.fxml"));

        try {
            fxmlLoader.load();
        }catch (IOException e){
            System.out.println(e.getMessage());
        }

        Controller c = fxmlLoader.getController();
        c.refreshTextArea(text);
    }
}

sample.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <TextArea fx:id="textArea" layoutX="39.0" layoutY="20.0" prefHeight="130.0" prefWidth="110.0" />
   </children>
</AnchorPane>

Я хочу получить ссылку на textArea в ClientRead классе, чтобы вызвать setText() на него из другого класса, в другомнить.Однако я попробовал этот метод, и он не сработал.Я пытался передать экземпляр класса Controller, используя this для конструктора ClientRead, но результат был тот же.

Что я делаю не так?

Спасибо за помощь:)

...