Question

Excusez la question probablement simple (et les terribles méthodes de mise en page). Le code que j'ai écrit avec succès des données entrées dans un fichier TXT et en cliquant sur "Soumettre" ferme la fenêtre d'entrée, laissant le "menu" ouvrir, avec des options pour ajouter un utilisateur (ce code) ou des propriétés de recherche (non liées). Je peux saisir un ensemble de détails sur le fichier TXT sans problème, mais lors de la réouverture de la fenêtre AddUser, peu importe ce qui est tapé dans les cases, les mêmes données sont entrées dans le fichier comme la fois précédente, sauf si le programme est fermé. Je pense que cela a quelque chose à voir avec la nettoyage d'une variable avant de rouvrir la fenêtre (comme essayé vers le bas) mais je n'ai pas eu de chance .. Comment puis-je y aller? Merci

AddUser.java

package assignment; 
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.io.*;
import java.lang.*;

public class AddUser extends JFrame {

    //Declare the array values

    private String[] Name;
    private String[] Username;
    private String[] Password;
    private String[] StaffID;

    public String inputStaff;
    public String inputUser;
    public String inputPass;
    public String inputID;

    static public String inputData;


    //Declare Text Fields
    public JTextField Field1;
    public JTextField Field2;
    public JTextField Field3;
    public JTextField Field4;
    public JTextField Field5;

    //Declare Labels

    private JLabel Label;
    private JLabel Label1;
    private JLabel Label2;
    private JLabel Label3;
    private JLabel Label4;
    private JLabel Label5;
    private JLabel Space1;
    private JLabel Space2;

public AddUser() {

    super("Add New Agent");     //Window Title
    setLayout(new FlowLayout(FlowLayout.LEFT));    //Set Layout Type as FlowLayout

    Label = new JLabel("Enter the Member of Staff's Details");
    Label1 = new JLabel("Staff Name");    //Label Values
    Label2 = new JLabel("Username");
    Label3 = new JLabel("Password");
    Label4 = new JLabel("Confirm Password");
    Label5 = new JLabel("Staff ID");
    Space1 = new JLabel("    ");
    Space2 = new JLabel("                                       ");

    Field1 = new JTextField (10);   //Create the Text Fields and Option Blocks & Arguments
    Field2 = new JTextField (10);
    Field3 = new JTextField (10);
    Field4 = new JTextField (10);
    Field5 = new JTextField (4);






    //Add the labels, textfields and option blocks to the JFrame

    add (Label); add(Space1); add (Label1); add (Field1); add (Label2); add (Field2); add (Label3); add (Field3); add (Label4);
    add (Field4); add (Label5); add (Field5); add (Space2);





    JButton button1 = new JButton("Submit");    //Add "Search" button to JFrame
    add (button1);

    onClick handler = new onClick();
    button1.addActionListener(handler);

    }

    private class onClick implements ActionListener{
        public void actionPerformed(ActionEvent event){

//Action to be performed

//Attempt to clear the fields

           inputStaff = ("");
           inputUser = ("");
           inputPass = ("");
           inputID = ("");




           inputStaff = Field1.getText();
           inputUser = Field2.getText();
           inputPass = Field3.getText();
           inputID = Field5.getText();

           inputData = inputStaff + " " + inputUser + " " + inputPass + " " + inputID;


           WriteFile Write = new WriteFile(); //Create instance of write-to-file

           setVisible(false);
            //Close the window on clicking submit



               }

            }


           }

L'écriture dans le code de fichier (writefile.java) est la suivante;

package assignment;

import java.io.*;

public class WriteFile{
static String data = AddUser.inputData;
BufferedWriter out;

public WriteFile(){
    try {
        out = new BufferedWriter(new FileWriter("AddUser.txt", true));

        out.write(data);

        out.newLine();

        out.close();
    }
    catch(IOException e)
    {
        System.out.println("There was a problem:" + e);

    }
}


}
Était-ce utile?

La solution

Cette façon de réaliser qui manque de quelques manières, veuillez considérer ce qui suit:

public static void WriteFile(String data){
    try {
        out = new BufferedWriter(new FileWriter("AddUser.txt", true));
        out.write(data);
        out.newLine();
        out.close();
    }
    catch(IOException e)
    {
        System.out.println("There was a problem:" + e);
    }
}

Et appelez ça comme ça:

WriteFile.WriteFile(inputData);

Je changerais également le nom de la méthode, mais j'ai essayé de le garder aussi près que possible du code d'origine.

N'accès pas aux champs d'une classe de cette manière SomeClass.someField, et essayez d'éviter les membres statiques lorsqu'ils ne sont pas nécessaires.

Autres conseils

La ligne

static String data = AddUser.inputData;

est exécuté une seule fois, lorsque la classe est chargée. C'est le cas avec toutes les variables statiques. (Vous semblez penser dans le sens de la "programmation de flux de données" ou des feuilles de calcul, mais Java ne fonctionne pas comme ça. Ou vous pourriez penser que les objets de chaîne sont mises à jour, mais ils ne sont pas - ils sont immuables.)

C'est un moyen terrible de mettre en œuvre des données entre les classes, et comme vous pouvez le voir, cela ne fonctionne pas. Cela ne fonctionnerait même pas une fois si pour une raison quelconque, cette classe se trouvait être chargée plus tôt qu'elle ne l'était.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top