[英]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.