【问题标题】:Need to load objects into an ArrayList read from a text file and output to JTextField?需要将对象加载到从文本文件读取的 ArrayList 中并输出到 JTextField?
【发布时间】:2015-12-14 11:40:43
【问题描述】:

我正在做一个项目,我想从名为“stars.txt”的文本文件中读取数据,为文件中的所有销售代表创建对象,将对象加载到 ArrayList 并显示它们使用增强的 for 循环进入我的 JTextField 并使用 toString 方法格式化。我已经在这几天了,无法让 stars.txt 数据显示在 JTextField 中!!!它在 NetBeans 中编译并显示我希望 stars.txt 文件中的数据采用的格式,而不是实际数据(即 salesID、firstName、lastName、osField、bsField、psField、buttonGroup1、buttonGroup2)。这都是在类(JButton)displayActionButtonPerformed 下。我创建了另一个名为 SalesReps 的类来存储变量、集合/获取和构造函数(我在主类下创建了这个,在 NetBeans 中是否重要我没有创建新类,即主之外的新 TAB?)我会喜欢我能得到的任何帮助。谢谢。这是我的代码:

private void displayButtonActionPerformed(java.awt.event.ActionEvent evt) { 

File file = new File("stars.txt"); 
SalesReps rep = new SalesReps(); 
ArrayList<SalesReps> aList = new ArrayList<>(); 

  try { 

    Scanner sc = new Scanner(file); 

    int sID = 0; 
    String fName = null; 
    String lName = null; 
    double oSupp = 0; 
    double bSupp = 0; 
    double pSupp = 0; 
    String button1 = null; 
    String button2 = null; 
    //SalesReps rep = null; 

    for (SalesReps aList1 : aList) { 
    System.out.println(aList1); 
    sID = sc.nextInt(); 
    fName = sc.next(); 
    lName = sc.next(); 
    oSupp = sc.nextDouble(); 
    bSupp = sc.nextDouble(); 
    pSupp = sc.nextDouble(); 
    button1 = sc.next(); 
    button2 = sc.next(); 
    rep = new SalesReps(sID, fName, lName, oSupp, bSupp, pSupp, 
          button1, button2); 
    aList.add(rep); 


 } 

      while (sc.hasNextLine()) { 
        String line = sc.nextLine(); 
        System.out.println(line); 
 } 

      sc.close(); 

  } catch (FileNotFoundException e) { 
 } 

   resultsTextArea.append(rep.toString()); 

}

 public class SalesReps { 

 private int salesID = 0; 
 private String firstName = null; 
 private String lastName= null ; 
 private double osField = 0; 
 private double bsField = 0; 
 private double psField = 0; 
 private String buttonGroup1 = null; 
 private String buttonGroup2 = null; 


 public int getSalesID() { 
 return salesID; 
} 

 public void setSalesID(int sID) { 
 salesID = sID; 
} 

 public String getFirstName() { 
 return firstName; 
} 

 public void setFirstName(String fName) { 
 firstName = fName; 
} 

 public String getLastName() { 
 return lastName; 
} 

 public void setLastName(String lName) { 
 lastName = lName; 
} 

 public double getOsField() { 
 return osField; 
} 

 public void setOsField(double oSupp) { 
 osField = oSupp; 
} 

 public double getBsField() { 
 return bsField; 
} 

 public void setBsField(double bSupp) { 
 bsField = bSupp; 
} 

 public double getPsField() { 
 return psField; 
} 

 public void setPsField(double pSupp) { 
 psField = pSupp; 
} 

 public String getButtonGroup1() { 
 return buttonGroup1; 
} 

 public void setButtonGroup1(String button1) { 
 buttonGroup1 = button1; 
} 

 public String getButtonGroup2() { 
 return buttonGroup2; 
} 

 public void setButtonGroup2(String button2) { 
 buttonGroup2 = button2; 
} 

 public SalesReps(int sID, String fName, String lName, 
                 double oSupp, double bSupp, double pSupp, String button1, 
                 String button2){ 

} 

 public SalesReps() { 
} 

 @Override 
 public String toString(){ 
 return String.format(" %s %s %s\n SUPPLIES" 
 + " %.2f \n BOOKS %.2f \n PAPER %.2f \n %s \n %s \n",salesID, 
 firstName, lastName, osField, bsField, psField, 
 buttonGroup1, buttonGroup2); 
  } 
} 

【问题讨论】:

标签: java object arraylist foreach tostring


【解决方案1】:

您永远不会解析文件中的行,这个循环for (SalesReps aList1 : aList) 正在循环一个空数组,因此它永远无法构建列表。这段代码说这里是一个空列表,因为空列表中的所有内容都执行此操作(当然永远不会发生),然后您只需接下来遍历文件即可。当您的扫描仪有更多行时,该逻辑应该继续。 while (sc.hasNextLine()) 您可以在此循环中完成所有解析,方法是在此处拆分行。此外,您最多只能显示一个这样的解析。

【讨论】:

  • 我有点遵循这一点,但是对于编码来说是全新的,我没有足够大的词汇量来掌握你所说的所有内容。我得到 for 循环正在循环一个空数组,我不太懂解析。有没有类似于我想要完成的例子?谢谢。
  • 解析是将字符串转换为结构化数据。您正在为此使用扫描仪。我认为如果您将 for 循环条件更改为 while (sc.hasNextLine()),您的代码将起作用。或者,老派的方法是获取下一行并将其拆分或使用正则表达式处理它。
【解决方案2】:

使用StringBuilder 连接数据并在JTextField 中显示。

StringBuilder s = new StringBuilder();

 .
 .
 .

  for (SalesReps aList1 : aList) { 
    System.out.println(aList1); 
    sID = sc.nextInt(); 
    fName = sc.next(); 
    lName = sc.next(); 
    oSupp = sc.nextDouble(); 
    bSupp = sc.nextDouble(); 
    pSupp = sc.nextDouble(); 
    button1 = sc.next(); 
    button2 = sc.next(); 
    rep = new SalesReps(sID, fName, lName, oSupp, bSupp, pSupp, 
          button1, button2);
    aList.add(rep); 
    s.append(rep.toString());
 }
 .
 .
 .
 resultsTextArea.append(s.toString()); 

希望是你的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多