Вы можете поместить все свои текстовые поля в массив и затем перебрать этот массив во время чтения текстового файла. Как это:
JTextField[] textFields = new JTextField[10];
// ... init your textFields here
int line =0; // first line will be first textfield and so on
Scanner scanner = new Scanner(new File("reload.txt")); // use Scanner instead of FileReader, it's easier :)
while(scanner.hasNextLine()){ // as long as you did not reach the end of the file
textFields[line++].setText(scanner.nextLine()); // get the next line and put it in the respective textfield
}
Однако, в этом случае вы должны убедиться, что есть текстовое поле для каждой строки или что вы не читаете больше строк, чем Есть текстовые поля.
, например:
while(.....){
....
if(line==textFields.length){
break;
}
}
Еще одна вещь, чтобы заметить будет, что порядок строк должен соответствовать порядку ваших TextFields.
Редактировать
Я должен добавить, что все это может работать без каких-либо проблем. Но это не очень изящное решение. Что происходит, когда вы меняете свой интерфейс и текстовые поля находятся в другом порядке? Или в вашем текстовом файле есть важная новая строка, но нет текстового поля в пользовательском интерфейсе?
Edit 2
код от вашего комментария не показывает, как вы положили в вашем текстовых полей JTextField массива. Мое предположение заключается в том, что вы используете некоторую среду IDE для создания графического интерфейса, поэтому у вас должен быть вызов initComomponents();
или что-то в вашем конструкторе. В этом случае удалите строку JTextField[] textFields = new JTextField[10];
из метода loadActionPerformed
и поместить его в конструктор, как это:
public class MyClass{
private JTextField[] textFields;
public MyClass(){
initComponents();
this.textFields = new JTextField[10] // where 10 is the number of lines in your textfile AND the number of JTextFields you have in your GUI
// then fill the array (by hand if you like)
this.textField[0] = koontf;
this.textField[1] = baamtf;
// and so on..
}
Edit 3
Просто чтобы понять, это то, что вам нужно сделать запуск программы , Допустим, что ваш класс называется MyClass
, то это может выглядеть следующим образом:
private JTextField[] textFields; // this creates your array
public MyClass(){ // this is the constructor of your class (I don't know how it is called)
initComponents(); // auto generated code from NetBeans to initalize your GUI elements
// init your array
textFields = new JTextField[12]; // 12 if I counted correctly
// fill it
textFields[0] = koontf;
textFields[1] = baamtf;
textFields[2] = sachitf;
textFields[3] = fakertf;
textFields[4] = phonsekaltf;
textFields[5] = lauretf;
textFields[6] = yeontf;
textFields[7] = aguerotf;
textFields[8] = agnistf;
textFields[9] = lokitf;
textFields[10] = lawliettf;
textFields[11] = ryuzakitf;
}
private void loadActionPerformed(java.awt.event.ActionEvent evt){
int line = 0;
try(Scanner scanner = new Scanner(new File("reload.txt"))){
while(scanner.hasNextLine()){
textFields[line++].setText(scanner.nextLine());
if(line == textFields.length){
break;
}
}
}catch(FileNotFoundException ex){
Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
}
koontf.requestFocus(); // you can only call request focus on one element at a time (it does not make sense to call it on all textfields
}
лучше, сохраняются как и JSON прочитать его обратно и установить в соответствующее поле. для справки см. https://www.mkyong.com/java/json-simple-example-read-and-write-json/ – subash