我正在尝试创建一个程序,该程序将从文本文件中读取电影列表并将其显示在textArea中,但是每当我调用toString()函数将textArea中的文本设置为电影列表时, ,没有任何显示。我在正确的位置创建MovieCatalog吗?有没有更好的方法来解决这个问题? 我使用场景生成器创建的fxml文档有一个Main类和一个Controller类。我的电影课在控制器中导入的“电影”包中。
我已经创建了电影的类和电影目录,并在测试器文件中测试了它们的功能,所以我知道问题不在于该代码。如果我使用简单的打印语句代替toString(),我的GUI也可以完美地工作。
MainWindowController.java
package application;
import movies.*;
import javafx.fxml.FXML;
import javafx.scene.control.*;
public class MainWindowController
{
//Views
@FXML TextArea movieListArea;
private Main main;
private MovieCatalog movieList = new MovieCatalog();
public void setMain(Main main)
{
this.main = main;
movieList.initializeMovieList("Movies.txt");
}
public void shuffleButton()
{
movieListArea.setText(movieList.toString());
}
}
Main.java
package application;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.*;
public class Main extends Application
{
private Stage mainStage;
@Override
public void start(Stage mainStage)
{
this.mainStage = mainStage;
mainWindow();
}
public void mainWindow()
{
try
{
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindowView.fxml"));
AnchorPane pane = loader.load();
MainWindowController mainWindowController = loader.getController();
mainWindowController.setMain(this);
Scene scene = new Scene(pane);
mainStage.setScene(scene);
mainStage.setTitle("Movie Program");
mainStage.show();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
launch(args);
}
}
如果我将movieListArea.setText(movieList.toString());
替换为movieListArea.setText("Hi");
,则“ Hi”将完美输出。我猜我的目录初始化有问题。不过,我不确定为什么会这样,因为当我在cmd窗口中运行一个简单的测试程序时,代码可以完美运行。