Как мне сложить загруженное значение из текстового файла с новым введенным значением в Jtextfield

#java #user-interface #netbeans #io #jframe

#java #пользовательский интерфейс #netbeans #io #jframe

Вопрос:

Когда я нажимаю кнопку загрузки, отображаются значения из reload.txt

    public class VotingSystem extends javax.swing.JFrame {

private final JTextField[] textFields;

/**
 * Creates new form VotingSystem
 */
public VotingSystem() {
initComponents();

textFields = new JTextField[12];

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(VotingSystem.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

}                                    

private void baamtfActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // TODO add your handling code here:
}                                 
  

Когда я нажимаю голосовать, оно должно суммироваться, но вместо этого возвращается к 1. Я могу каким-либо образом добавить его к импортированному значению???Ниже приведен код для кнопки голосования Jbutton.

      int pick1 = 0, pick2 = 0,pick3 = 0, pick4 = 0,pick5 = 0, pick6 = 0, pick7 = 0, pick8 = 0, pick9 = 0, pick10 = 0, pick11 = 0, pick12 = 0;
private void voteActionPerformed(java.awt.event.ActionEvent evt) {                                     
    // TODO add your handling code here:

    if (koonchk.isSelected()){
        pick1  ;
    koontf.setText(Integer.toString(pick1));
    }
    else if (baamchk.isSelected()){
        pick2  ;
    baamtf.setText(Integer.toString(pick2));
    }
    if(sachichk.isSelected()){
        pick3  ;
    sachitf.setText(Integer.toString(pick3));
    } 
    else if (fakerchk.isSelected()){
        pick4  ;
    fakertf.setText(Integer.toString(pick4));
    }
    if (phonsekalchk.isSelected()){
        pick5  ;
    phonsekaltf.setText(Integer.toString(pick5));
    }
    else if (laurechk.isSelected()){
        pick6  ;
    lauretf.setText(Integer.toString(pick6));
    }
    if (yeonchk.isSelected()){
        pick7  ;
    yeontf.setText(Integer.toString(pick7));
    }
    else if (aguerochk.isSelected()){
        pick8  ;
    aguerotf.setText(Integer.toString(pick8));
    }
    else if (agnischk.isSelected()){
        pick9  ;
    agnistf.setText(Integer.toString(pick9));
    }
    if (lokichk.isSelected()){
        pick10  ;
    lokitf.setText(Integer.toString(pick10));
    }
    else if (lawlietchk.isSelected()){
        pick11  ;
    lawliettf.setText(Integer.toString(pick11));
    }
    else if (ryuzakichk.isSelected()){
        pick12  ;
    ryuzakitf.setText(Integer.toString(pick12));
    }
}
  

Ответ №1:

Проблема заключается в том, что вы инициализируете все переменные как

 int pick1 = 0, pick2 = 0,pick3 = 0, pick4 = 0,pick5 = 0, pick6 = 0, pick7 = 0, pick8 = 0, pick9 = 0, pick10 = 0, pick11 = 0, pick12 = 0;
  

Таким образом, предыдущие значения текста, которые вы загрузили, теряются. Я бы посоветовал вам инициализировать переменные как:

 int pick1 = Integer.parseInt(textFields[1].getText());
int pick2 = Integer.parseInt(textFields[2].getText());
.
.
.
//And so on.
  

Это гарантирует, что предыдущее число в текстовом поле останется там, где оно есть.

Еще лучшим решением было бы объявить целочисленный массив переменных как pick с размером 12. Нравится:

 int[] pick = new int[12];
  

Затем объявите метод, который будет обновлять текстовые поля значением pick like:

 public void updateTextFields(){
    for(int i = 0; i < 12; i  ){
        textFields[i].setText(String.valueOf(pick[i])); //corrected the code
    }
}
  

Теперь в вашем методе чтения файла вместо

     textFields[line  ].setText(scanner.nextLine());
  

использовать

     pick[i  ] = Integer.parseInt(scanner.nextLine());
  

и в последней строке метода просто вызовите ранее объявленный updateTextFields() .

Также в методе голосования удалите весь код для textField.setText() . и в последней строке просто вызовите метод upadateTextFields() . Что я имею в виду под этим:

 private void voteActionPerformed(java.awt.event.ActionEvent evt) {                                     
    // TODO add your handling code here:

    if (koonchk.isSelected()){
        pick1  ; //Change to pick[1]  
//    koontf.setText(Integer.toString(pick1)); remove
    }
    else if (baamchk.isSelected()){
        pick2  ; //change to pick[2]  
//    baamtf.setText(Integer.toString(pick2)); remove
    }
    if(sachichk.isSelected()){
        pick3  ; //change to pick[3]  
//    sachitf.setText(Integer.toString(pick3)); remove
    } 
    else if (fakerchk.isSelected()){
        pick4  ; //Change to pick[4]  
//    fakertf.setText(Integer.toString(pick4)); remove
    }
    if (phonsekalchk.isSelected()){
        pick5  ; //Change to pick[5]  
//    phonsekaltf.setText(Integer.toString(pick5)); remove
    }
    else if (laurechk.isSelected()){
        pick6  ; //Change to pick[6]  
//    lauretf.setText(Integer.toString(pick6)); remove
    }
    if (yeonchk.isSelected()){
        pick7  ; //Change to pick[7]  
//    yeontf.setText(Integer.toString(pick7)); remove
    }
    else if (aguerochk.isSelected()){
        pick8  ; //Change to pick[8]  
//    aguerotf.setText(Integer.toString(pick8)); remove
    }
    else if (agnischk.isSelected()){
        pick9  ; //Change to pick[9]  
    //agnistf.setText(Integer.toString(pick9)); remove
    }
    if (lokichk.isSelected()){
        pick10  ; //Change to pick[10]  
    //lokitf.setText(Integer.toString(pick10)); remove
    }
    else if (lawlietchk.isSelected()){
        pick11  ; //Change to pick[11]  
    //lawliettf.setText(Integer.toString(pick11)); remove
    }
    else if (ryuzakichk.isSelected()){
        pick12  ; //Change to pick[12]  
    //ryuzakitf.setText(Integer.toString(pick12)); remove
    }
    updateTextFields(); //Add this new line.
}
  

Комментарии:

1. Отображается ошибка «переменные текстовые поля, возможно, не были инициализированы.

2. должно ли это быть int pic1 = Integer.parseInt(TextFields[0].getText()); ?

3. @JericMarquez извините, это опечатка, я ее исправил.

4. Кажется, что у меня проблема с изменением имен объявленных переменных из-за результатов. ` выполнен приватный недействительный результат (java.awt.event. ActionEvent evt) { StringBuilder message = new StringBuilder(); // ЧТОБЫ добавить сюда свой код обработки: if(pick1 > pick2 ){ message.append(«Новый президент — Кун! n»); } else if(pick2 > pick1){ message.append(«Новый президент — Баам! n»); }`

5. @JericMarquez.где бы вы ни pick1 заменяли на pick[1] и так далее во всем вашем коде, и это решило бы вашу проблему