java - 从 jtextfield 提供数据并将它们存储到文件中

标签 java swing file jtextfield getter-setter

我要编写一个图书馆应用程序。

我使用 netbeans。

我有一个这样的界面:

package Library;

 public interface UserInformation {

 public void setFName(String fn);
 public String getFName();
 public void setLName(String ln);
 public String getLName();
 public void setRegNum(int reg_num);
 public int getRegNum();
 public void setDate(int reg_date);
 public int getDate();
}

我的 NewUserDialog 实现了这个接口(interface):

private String FirstName="";
private String LastName="";
private int Registration_Number=0;
private int Date=0;
private String fileadress="AllUserRecords.txt";

public NewUserDialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();

}
// // <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    jTextField1 = new javax.swing.JTextField();
    jTextField2 = new javax.swing.JTextField();
    jTextField3 = new javax.swing.JTextField();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jLabel5 = new javax.swing.JLabel();
    jLabel6 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    jLabel1.setFont(new java.awt.Font("Tunga", 1, 14)); // NOI18N
    jLabel1.setText("Add New User (Registration)");

    jLabel2.setText("First Name:");

    jLabel3.setText("Last Name:");

    jLabel4.setText("Date:");

    jTextField2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jTextField2ActionPerformed(evt);
        }
    });

jButton1.setText("Create");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jButton2.setText("Back");

    jLabel5.setText("Registration Number is:");

    jLabel6.setText("            ");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(54, 54, 54)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel2)
                        .addComponent(jLabel4)
                        .addComponent(jLabel3)
                        .addComponent(jLabel5))
                    .addGap(98, 98, 98)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel6)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField3)
                            .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
                            .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jTextField2))
                        .addComponent(jLabel1)))
                .addGroup(layout.createSequentialGroup()
                    .addGap(68, 68, 68)
                    .addComponent(jButton1)))
            .addContainerGap(141, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel1)
            .addGap(26, 26, 26)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jLabel2)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(28, 28, 28)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel3))
                    .addGap(34, 34, 34)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4))))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel5)
                .addComponent(jLabel6))
            .addGap(27, 27, 27)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButton1)
                .addComponent(jButton2))
            .addGap(116, 116, 116))
    );

    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try{
    setFName(jTextField1.getText());
    if(havedigit(FirstName)==true) throw new Exception();
    WriteToFile(getFName());
    setLName(jTextField2.getText());
    if(havedigit(LastName)==true) throw new Exception();
    WriteToFile(getLName());
    setDate(Integer.parseInt(jTextField3.getText()));
    WriteToFile(String.valueOf(getDate()));
    Random rnd1=new Random();
    Registration_Number=rnd1.nextInt(100);
    setRegNum(Registration_Number);
    WriteToFile(String.valueOf(getRegNum()));
    jLabel6.setText(String.valueOf(getRegNum()));
    }
    catch(Exception e){
        jLabel6.setText("Error!");
    }
}                                        

public boolean havedigit(String in){
    for(int i=0;i<in.length();i++){
        if(Character.isDigit(in.charAt(i)))  return true;
    }
    return false;
}

public void WriteToFile(String content){
    try{
        File f=new File("C:\\userrecords.txt");
        if(!f.exists()){
            f.createNewFile();
        }
        else{
            FileWriter fw=new FileWriter(f.getAbsoluteFile(), true);
            BufferedWriter bw=new BufferedWriter(fw);
            bw.write(content);
            bw.newLine();
            bw.close();
            System.out.println("Done");
        }
    }
    catch(Exception e){
        e.printStackTrace();
    }

}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            NewUserDialog dialog = new NewUserDialog(new javax.swing.JFrame(), true);
            dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent e) {
                    System.exit(0);
                }
            });
            dialog.setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
// End of variables declaration                   

public void setFName(String fn) {
    FirstName.equals(fn);
}

public String getFName() {
    return FirstName;
}

public void setLName(String ln) {
    LastName.equals(ln);
}

public String getLName() {
    return FirstName;
}

public void setRegNum(int reg_num) {
    Registration_Number=reg_num;
}

public int getRegNum() {
    return Registration_Number;
}

public void setDate(int reg_date) {
    Date=reg_date;
}

 public int getDate() {
   return Date;
}
}

我的目的是当我们归档 jtextfile 字段并单击按钮时,此数据应保存到 .txt 文件中。 但是 Fname 和 Lname 都没有保存到文件,只有“Date”文件保存到文件。 我希望 Fname 和 Lname 以及数据必须定期存储在文本文件中。

谢谢!

最佳答案

您的设置方法 setFName(...)setLName(...) 根本不做任何设置。相反,他们所做的只是执行不必要且莫名其妙的相等性测试,然后丢弃结果:

public void setLName(String ln) {
    LastName.equals(ln); // ???????
}

如何创建真正的 setter 方法来设置引用变量持有的对象:

public void setLName(String ln) {
    lastName = ln; // note variable names should begin w/ a lowercase letter
}

如果您不设置这些字段,那么您就不能指望来自 getter 方法的信息在写入文件时有用。

还有一个较弱的 catch block ,它不会通知您堆栈跟踪的内容,这些信息可能会帮助您找出问题所在。

此外,您的 GUI 实现一个似乎更适合模型类而非 View (GUI) 类的非 GUI 界面的目的是什么?我更喜欢这里的组合而不是继承。

关于java - 从 jtextfield 提供数据并将它们存储到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957688/

相关文章:

java - 检查列表是否包含对象 - java

java - 错误“找不到符号 - 方法 isCompleted()

java - 检查事件是否正确并根据结果启用按钮

java - 将多个透明 JComponents 对象添加到一个 JPanel

java - 导出时不以 Unicode 格式写入

java 用户验证字符串输入,直到给出正确的输入

java - Spring 3.1 : How do I inject a bean created in a different configuration class

java - 更改 DefaultMutableTreeNode 的文本样式

java - 开发 Google App Engine 应用程序时无法在本地测试中使用相对路径访问文件

arrays - 如何在 ruby​​ 中对文件名进行排序?