Очистка JTextfields для записи нескольких данных в текстовый файл - PullRequest
1 голос
/ 16 мая 2011

извините, возможно, простой вопрос (и ужасные методы размещения). Код, который я успешно записываю введенные данные в текстовый файл и, нажав «отправить», закрывает окно ввода, оставляя «меню» открытым, с опциями добавления пользователя (этот код) или свойств поиска (не связанных). Я могу без проблем ввести один набор деталей в текстовый файл, но при повторном открытии окна AddUser, независимо от того, что введено в поля, в файл вводятся те же данные, что и в предыдущий раз, если только программа не закрыта. Я думаю, что это как-то связано с очисткой некоторой переменной перед повторным открытием окна (как это было сделано в конце), однако мне не повезло ... Как мне это сделать? Спасибо

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



               }

            }


           }

Код записи в файл (WriteFile.java) выглядит следующим образом:

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);

    }
}


}

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Линия

static String data = AddUser.inputData;

запускается только один раз, когда класс загружается. Это касается всех статических переменных. (Вы, кажется, думаете по принципу «программирования потока данных» или электронных таблиц, но Java не работает так. Или вы можете подумать, что объекты String можно обновлять, но это не так - они неизменны.)

Это ужасный способ реализовать передачу данных между классами, и, как вы можете видеть, он не работает. Это даже не сработало бы один раз, если бы по какой-то причине этот класс был загружен раньше, чем был.

1 голос
/ 16 мая 2011

Для достижения этого недостатка, пожалуйста, примите во внимание следующее:

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);
    }
}

И назовите это так:

WriteFile.WriteFile(inputData);

Я бы также изменил название метода, но я старался максимально приблизить его к исходному коду.

Не обращайтесь к полям класса таким способом SomeClass.someField и старайтесь избегать статических членов, когда они не нужны.

...