JavaFX读取文本文件并将其显示到多个文本字段



我有一个文本文件,其中有4行随机单词,一行接一行,我需要能够读取每一行并将其显示到其文本字段中(第一行进入第一个文本字段,等等(,但它只读取最后一行并显示到任何文本字段中。

"myfile.txt">
一个

两个

三个

一对三

TextField label1Text = new TextField();
TextField label2Text = new TextField();
TextField label3Text = new TextField();

load.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent l) {


String line = ""; 
try {
BufferedReader reader = new BufferedReader(new FileReader("myfile.txt"));

while ((line = reader.readLine()) != null) {

label1Text.setText(line);
label2Text.setText(line);
label3Text.setText(line);
labelO2Text.setText(line);   
}

} 
catch (FileNotFoundException e) {
e.printStackTrace();
}

catch (IOException e) {
e.printStackTrace();

}
}

});
primaryStage.show();


}    

}

当前代码依次读取每一行,并为每一行将所有标签的文本设置为该行文本。

相反,您需要依次获取每个标签,并将其文本设置为文件的下一行。你可以用这样的东西来做到这一点:

try (BufferedReader reader = new BufferedReader(new FileReader("myfile.txt"))) {
List.of(label1Text, label2Text, label3Text, label02Text)
.forEach(label -> {
try {
label.setText(reader.readLine());
} catch (IOException exc) {
// handle exception
}
});
} 

您正在读取一行,然后将该行的内容设置为所有3/4 TextFields(示例中缺少一个(。循环结束后,所有TextFields都设置为文件最后一行的内容。

有多种方法可以实现您想要的内容-如果您只有4个条目,以下方法将起作用:

String[] lines = new String[4];
int index = 0;
while ((line = reader.readLine()) != null) {   
lines[index++] = line;
if (index==4) break;
}
label1Text.setText(lines[0]);
label2Text.setText(lines[1]);
label3Text.setText(lines[2]);
label4Text.setText(lines[3]);

如果你在一个数组中引用了你的TextFields,你也可以进行

int index = 0;
while ((line = reader.readLine()) != null) {   
labels[index++].setText(line);
if (index==4) break;
}

问题出现在循环中

while ((line = reader.readLine()) != null) {
label1Text.setText(line);
label2Text.setText(line);
label3Text.setText(line);
labelO2Text.setText(line);   
}

基本上,如果我们观察循环,第一次迭代将所有标签都更改为单词";一";,循环中的第二次迭代将所有标签设置为"0";两个";,比";三个";并且最后一次迭代将所有标签设置为"0";四";。

为了解决这个问题,你可以添加一个简单的计数器和一些if语句,这样它就会告诉你的循环该做什么

int counter = 0;
while ((line = reader.readLine()) != null) {
if(counter == 0)
label1Text.setText(line);
if(counter == 1)
label2Text.setText(line);
if(counter == 2)
label3Text.setText(line);
if(counter == 3)
labelO2Text.setText(line);
counter++;                      
}

我确信这不是最优化的方式,但如果你想用循环来做,那就是了

相关内容

  • 没有找到相关文章

最新更新