无法从其他类编辑Javafx Application类中的非静态文本区域

时间:2017-05-25 09:46:52

标签: java javafx fxml

我正在尝试在JavaFX中实现一个用于基于文本的游戏的GUI。

主要课程的这一部分设置了所有内容:

public class Main extends Application{

@FXML 
protected TextField input;

@FXML
protected TextArea output, inventory, commands;

protected static List<String> history;
protected static int historyPointer;
protected static String textToRead = null;

private Service<Void> backgroundThread;

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

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(Main.class.getResource("Console.fxml"));

    BorderPane root = (BorderPane) loader.load();

    history = new ArrayList<>();
    historyPointer = 0;

    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.setTitle("MyConsoleFXGUI"); //Could later be changed so that the actual game title is displayed here.
    stage.show();

我使用从SceneBuilder生成的FXML文件,Main是控制器。它运作良好,当我尝试通过初始化函数设置一些文本输入时,文本打印正常(但我现在已删除该方法)。

当我启动Game-class并尝试将文本打印到main中的文本区域“Input”时,问题就来了。

我在Main中使用此方法来设置文本:

/**
 * Called when the game wants to print something to the game
 * @param message The text to be printed to the console.
 */
public void printGameInfo(String message) {
    System.out.println("This method was attempted!");
    output.setText(message + System.lineSeparator());
}

这个方法应该有效,我遇到的问题是我不知道如何从Game-class中调用它。由于没有实例化Main类,我无法调用Main-object,因此无法使文本区域保持静态,因为它不适用于JavaFx应用程序。

那么我如何从一个单独的类调用“printGameInfo”来将一些字符串设置为文本区域?

非常感谢!

1 个答案:

答案 0 :(得分:0)

Main类肯定是实例化的,或者如何能够调用其非静态的start方法?当您实例化您的Game类时,您可以向它传递对Main类实例的引用。然而,这是一个非常好的软件设计。