我正在尝试在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”来将一些字符串设置为文本区域?
非常感谢!
答案 0 :(得分:0)
Main类肯定是实例化的,或者如何能够调用其非静态的start方法?当您实例化您的Game类时,您可以向它传递对Main类实例的引用。然而,这是一个非常好的软件设计。