如何为另一个类中使用的ArrayList对象创建别名



所以我有三个不同的类,一个:创建State对象,两个:从csv文件读取数据并将这些数据传递给State构造函数,以便创建State对象的ArrayList,三个:在GUI中显示这些信息。

两个的代码在这里:

public class DataReader
{
private ArrayList<State> states  = new ArrayList<State>();
private File file = new File("data_11_09.csv"); 
public ArrayList<State> readData() throws FileNotFoundException {
Scanner read = new Scanner(file);
read.useDelimiter(",");

String stateName;
int infectionNum;
int deathNum;

while (read.hasNextLine()) {
stateName = read.nextLine();
infectionNum = read.nextInt();
deathNum = read.nextInt();
states.add(new State(stateName, infectionNum, deathNum));
}
read.close();

return states;
}
}

然后为第三类编码:

public class ChartWindow extends Application
{
ArrayList<State> displayStates = new ArrayList<State>();
final double RADIUS = 2000;
int horSpace;
int verSpace;

@Override
public void start(Stage primaryStage) {


}

public State drawState() {
collections.copy(displayStates, states);
}
}

然而,在drawState((方法下;状态";找不到。我不知道如何从第二类到第三类引用状态ArrayList。任何帮助都将不胜感激。。。很抱歉,如果这是长篇大论,但我是新来的

你可以试试这样的东西:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
public class ChartWindow extends Application {
@Override
public void start(Stage stage) {
DataReader reader = new DataReader();
ListView<State> stateListView = new ListView<>(
FXCollections.observableArrayList(
reader.readData()
)
);
stage.setScene(new Scene(stateListView));
}
}

要点:

  1. 您不需要drawState((方法,JavaFX会在场景中自动绘制东西,如果您正在更新场景控件的可观察属性,则会更新它们
  2. JavaFX应用程序是执行的入口点,因此您需要让它创建运行所需的东西(例如,应用程序创建DataReader,而不是相反(
  3. 因为JavaFX应用程序正在创建数据读取器,它将自动具有对它的引用,所以您不需要四处传递对DataReader的引用
  4. 你可以使用TableView而不是ListView,我只是使用了ListView,因为它需要更少的代码
  5. 为了使ListView以有意义的方式显示项,您可以向State对象添加一个toString方法(或在ListView上实现一个单元格工厂(
  6. 对于您的实际应用程序,您可能有不同的要求,我只是提供了上面的代码,让您更好地开始

其他一些评论是正确的,要想在这项工作中取得成功,你可能需要花费大量的时间和精力来学习一些基本的编程教程(例如"Trails Covering the Basics"(。

最新更新