2016-10-18 19 views
2

Возможно ли читать несколько строк из текстового файла и экспортировать его в соответствующие поля jtextfield?

private void loadActionPerformed(java.awt.event.ActionEvent evt) {          
    // TODO add your handling code here: 
    try{ 
     FileReader reader = new FileReader("reload.txt"); 
     BufferedReader br = new BufferedReader(reader); 
     koontf.read(br,null); 
     baamtf.read(br,null); 
     sachitf.read(br,null); 
     fakertf.read(br,null); 
     phonsekaltf.read(br,null); 
     lauretf.read(br,null); 
     yeontf.read(br,null); 
     aguerotf.read(br,null); 
     agnistf.read(br,null); 
     lokitf.read(br,null); 
     lawliettf.read(br,null); 
     ryuzakitf.read(br,null); 
     br.close(); 
     koontf.requestFocus(); 
     baamtf.requestFocus(); 
     sachitf.requestFocus(); 
     fakertf.requestFocus(); 
     phonsekaltf.requestFocus(); 
     lauretf.requestFocus(); 
     yeontf.requestFocus(); 
     aguerotf.requestFocus(); 
     agnistf.requestFocus(); 
     lokitf.requestFocus(); 
     lawliettf.requestFocus(); 
     ryuzakitf.requestFocus(); 

    }catch(IOException e) { 

    } 
}          

ли даже можно поставить каждому из них определенный TextField? Как 12 до jtextfield1,10 к jTextField2 и так далее ... Я пробовал некоторые учебники и не может действительно понять это.

+0

лучше, сохраняются как и JSON прочитать его обратно и установить в соответствующее поле. для справки см. https://www.mkyong.com/java/json-simple-example-read-and-write-json/ – subash

ответ

2

Вы можете поместить все свои текстовые поля в массив и затем перебрать этот массив во время чтения текстового файла. Как это:

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 
} 
+1

Я бы предпочел использовать 'Collection' вместо' Array'. Его размер можно изменить проще. – slartidan

+0

Хорошая точка! Мои личные предпочтения - это 'ArrayList ', потому что порядок элементов не изменяется (в данном конкретном случае) – GameDroids

+0

private void loadActionPerformed (java.awt.event.ActionEvent evt) { // TODO добавьте свой код обработки здесь: JTextField [] textFields = новый JTextField [10]; int line = 0; Сканер сканер = новый сканер («reload.txt»); while (scanner.hasNextLine()) { textFields [строка ++]. SetText (scanner.nextLine()); if (строка == textFields.length) { break; } } } –

Смежные вопросы