我有一个输入文件,其中有几个由空格分隔的字段,如下所示:
10 416-555-6666 Burgess 15
15 905-777-8888 Thomas 10
20 905-111-2222 Morris 5
我有一个单独的类文件'Record',它与输入文件有关,该文件有ID,电话,姓名,工作年限。
在我的main方法中,我创建了一个名为employeeList的'Record'对象的ArrayList。 ArrayList由while循环填充,该循环将读取输入文件拆分为由Record构造函数定义的类别。
我的下一个任务是创建一个可以显示和循环输入文件的GUI,但是我在设计“记录”对象在文本字段中显示的方式时遇到了麻烦。我在下面附上了一张图片,以显示我想要获得的内容:
example drawing
下一个雇员按钮将循环到ArrayList上的下一个项目,作为下一个记录对象。我已经在下面添加了我的代码,并希望了解有关下一步操作的任何建议(制作显示项目ArrayList的GUI)。
package javaapplication4;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class App {
private JFrame f;
private JPanel p;
private JButton b1;
private JLabel lab;
private JTextArea empID;
private JTextArea telephone;
private JTextArea name;
private JTextArea yearsWorked;
public App() {
gui();
}
public static void main(String[] args) throws FileNotFoundException {
File inputFile = new File("Emp.txt");
Scanner in = new Scanner(inputFile);
ArrayList<Record> employeeList = new ArrayList<Record>();
while(in.hasNextLine()) {
String line = in.nextLine();
String[] peopleInfo = line.split("\\s+");
int empId = Integer.parseInt(peopleInfo[0]);
String telephone = peopleInfo[1];
String name = peopleInfo[2];
int years_of_Work = Integer.parseInt(peopleInfo[3]);
employeeList.add(new Record(empId, telephone, name, years_of_Work));
}
new App();
}
public void gui() {
f = new JFrame("UpdateEmp");
f.setVisible(true);
f.setSize(600,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new JPanel();
b1 = new JButton("Test");
lab = new JLabel();
empID = JTextField();
telephone = JTextField();
name = JTextField();
yearsWorked = new JTextField();
p.add(b1);
p.add(lab);
f.add(p);
}
}
答案 0 :(得分:0)
您需要将记录列表移动到需要访问它的类(App
),而不是main
方法中的局部变量。您还需要一个实例变量来记录当前记录的索引:
class App {
private final List<Record> records = new ArrayList<>();
private int currentRecord = 0;
...
}
我建议将读取记录的逻辑移动到App
的方法,这样就不需要传递它了。您的main
方法应该非常简单。类似的东西:
App app = new App();
app.readRecords();
app.showGui();
要显示记录,您需要使用方法来设置您创建的字段以及“下一个”和“上一个”方法。
private void showRecord() {
assert currentRecord >= 0 && currentRecord < records.size();
Record record = records.get(currentRecord);
telephoneField.setText(record.getTelephone());
...
}
private void previous() {
if (currentRecord > 0) {
currentRecord--;
showRecord();
}
}
private void next() {
if (currentRecord < records.size() - 1) {
currentRecord++;
showRecord();
}
}