繁体   English   中英

如何将用户输入从 JTextfield 添加到文本文件

[英]How do I add user input from JTextfield to Text file

我一直在尝试使用 GUI 创建一个简单的注册表单,并且很难将用户输入从 JTextfield 保存到 txt 文件。 到目前为止,这是我想出的:

package com.main;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class RegisterScreen extends JFrame implements ActionListener{

JLabel lblCreateUser, lblCreatePassword; 
JTextField txtNewUsername, txtNewPassword;

JButton btnCreateAccount;
public RegisterScreen(){
    super("Create new User");
    setLayout(null);

    lblCreateUser = new JLabel("Please enter your Email Address");
    lblCreatePassword = new JLabel("Please enter your Password");
    txtNewUsername = new JTextField("Username");
    txtNewPassword = new JTextField("Password");
    btnCreateAccount = new JButton("Create account");
 

    lblCreateUser.setBounds(100,50, 250,40);
    lblCreatePassword.setBounds(50, 150, 300, 40);
    txtNewUsername.setBounds(50, 200, 300,  40);
    txtNewPassword.setBounds(125, 250, 150, 40);
    btnCreateAccount.setBounds(125, 350,150, 12);

    btnCreateAccount.addActionListener(this);

    add(lblCreateUser);
    add(txtNewUsername);
    add(lblCreatePassword);
    add(txtNewPassword);
    add(btnCreateAccount);

    addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent exit){
            System.exit(0);
        }
    });
    setSize(400,600);
    setVisible(true);
    setResizable(false);

}
public static void main (String []args){
    RegisterScreen register = new RegisterScreen();
}
public void actionPerformed(ActionEvent e) {
    try{
        BufferedWriter addUser = new BufferedWriter(new FileWriter("Usernames.txt"));
        BufferedWriter addPassword = new BufferedWriter(new FileWriter("Passwords.txt"));

        if(e.getSource() == btnCreateAccount){
          
           addUser.write(txtNewUsername.getText() +"\n");
           addPassword.write(txtNewPassword.getText()+"\n");

           addUser.close();
           addPassword.close();

           JOptionPane.showMessageDialog(null, "Account Successfully Created", "Success",1);
        }
    }
    catch(IOException err){
        System.err.println("File not Found.");
    }
   
    
}

}

在此程序中,用户名和密码将分别存储到各自的文本文件中。 问题是,每当我尝试单击创建帐户按钮时,它并没有将用户输入添加到另一行,而是将文件本身的全部内容完全替换为用户输入。 任何帮助深表感谢。

对我来说很好...

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel implements ActionListener {

        private JTextField txtNewUsername;
        private JPasswordField txtPassword;
        private JButton btnCreateAccount;

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;

            txtNewUsername = new JTextField(10);
            txtPassword = new JPasswordField(10);
            btnCreateAccount = new JButton("Create");

            add(txtNewUsername, gbc);
            add(txtPassword, gbc);
            add(btnCreateAccount, gbc);

            btnCreateAccount.addActionListener(this);
        }

        public void actionPerformed(ActionEvent e) {
            File user = new File("Usernames.txt");
            File pass = new File("Passwords.txt");

            if (e.getSource() == btnCreateAccount) {
                try (BufferedWriter addUser = new BufferedWriter(new FileWriter(user, true)); BufferedWriter addPass = new BufferedWriter(new FileWriter(pass, true))) {
                    addUser.write(txtNewUsername.getText());
                    addUser.newLine();
                    addPass.write(txtPassword.getText());
                    addPass.newLine();
                    JOptionPane.showMessageDialog(null, "Account Successfully Created", "Success", JOptionPane.INFORMATION_MESSAGE);
                } catch (IOException exp) {
                    JOptionPane.showMessageDialog(this, "Account creation failed", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        }

    }
}

您也可以考虑看看The try-with-resources Statement

要保留用户输入,您可以使用任意数量的对象。 我将在这里使用StringBuilder

StringBuilder userInput = new StringBuilder();

然后读取输入,用这个方法调用名字:

userInput.append(fieldName.getText()).append("\n");

之后,您需要将它与任何其他少数对象一起写入文件。 我将在这里使用FileWriter

FileWriter fileWriter = new FileWriter("filename.txt");

然后调用以下命令:

fileWriter.write(userInput.toString());

最终当你完成写作时:

fileWriter.close();

更多信息

.append(String s)用于将指定的字符串附加到此字符串中。 append()方法被重载,如append(char)append(boolean)append(int)append(float)append(double)等。

FileWriter(String file)创建一个新文件; 它以字符串形式获取文件名。 void write(String text)用于将字符串写入 FileWriter。 并且void close()用于关闭 FileWriter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM