【问题标题】:Java Swing filling multiple JTextFields with data from a text fileJava Swing 用文本文件中的数据填充多个 JTextField
【发布时间】:2018-04-16 17:33:54
【问题描述】:

我正在尝试使用 swing 制作联系人簿,但在用文件中的数据填充文本字段时遇到问题。

我有名字,姓氏,地址和电话号码(字符串)的框,文本文件的结构是这样的:

Name
Surname
Address
Phone
Name
Surname
Address
Phone
...

我有一个 ArrayList 来保存联系人,当我没有从文件中读取数据时,我使用了 contacts.add(String, String, String, String) 我成功地在 TextFields 中显示了数据。

我试过这个从文件中读取,但它似乎不起作用。

试试{

    this.myFile = new File("contacts.txt");
    this.scan = new Scanner(myFile);

    while (scan.hasNext()) {

        contact = new Contact(scan.next(), scan.next(), scan.next(), scan.next());
        contacts.add(contact);

    }
}   
catch (InputMismatchException e) {
    System.err.println("Invalid");
}
catch (FileNotFoundException e) {
    System.err.println("Not found");
}
finally {
    if (scan != null) {
        scan.close();
    }
    else {
        System.out.println("empty");
    }
}

使用数据库会更容易/更好吗? 谢谢

【问题讨论】:

  • 联系人是联系人对象的 ArrayList 吗?另外,您遇到了什么样的错误?
  • 是 ArrayList 联系人 = new ArrayList();
  • 你得到什么错误?
  • @EmreDalkiran 我得到一个 NoSuchElementException
  • 我在下面编辑了我的评论。

标签: java swing arraylist java.util.scanner jtextfield


【解决方案1】:

您只检查下一行,但尝试在第一行之后阅读接下来的三行而不检查。

scan.next();// reads until next token

试试这个

scanner.nextLine();//read until the end of line. 

您应该将您的逻辑置于每次扫描前检查并在 4 次扫描之间创建一个新的联系人对象以存储信息的方式。

【讨论】:

  • 这样?联系人=新联系人(scan.next(),scan.next(),scan.next(),scan.next(),scan.next()+ scan.nextLine());
  • 不行,把每个scan.next()改成scan.nextLine();除此之外,您需要在每次扫描之前检查它是否为空。另外,我相信您的联系人类有 4 个变量,而不是 5 个。这就是您收到该错误的原因。您的联系构造函数需要 4 个参数。您正在尝试使用 5 个参数调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 2015-07-07
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多