2012-12-19 87 views
1

我將編寫一個庫應用程序。從jtextfield提供數據並將它們存儲到文件中

我使用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實現了這個接口:

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都沒有保存到文件,只是「日期」文件保存到文件。 ,我希望Fname和Lname和Data必須在文本文件中定期存儲。

謝謝!

回答

3

您的setter方法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塊,它不會告訴您堆棧跟蹤的內容,這些信息可以幫助您找出錯誤。

此外,您的GUI有什麼用途來實現非GUI界面,該界面似乎更適合模型類而不是視圖(GUI)類?我會在這裏贊成組合,而不是繼承。

+0

@ Sajjad-himorning:不客氣。 –

相關問題