问题1:所以基本上我正在从8个学生的文本文件(name,mark1,mark2)中读取,我将它存储在一个ArrayList中,并附带一个String,这是用户照片的路径 - 然后我把它ComboBox中的所有学生姓名,当用户选择名称时,需要分别在标签和面板中显示两个相关标记和照片。问题是,当用户从ComboBox中选择一个名字时,我不知道如何检索信息。我的初步想法是获取所选项目并使用它,但不知道从那里到哪里......!
问题2:当我尝试将新信息写入文本文件时,我得到了Nullpointer Excpetion!
//用于读取和写入文本文件的类
public class FileConnect {
ArrayList<Student> studs = new ArrayList<Student>();
public FileConnect() {
String s;
String a;
try {
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Student\\Desktop\\Marks.txt"));
while ((s = br.readLine()) != null) {
a = br.readLine();
int i = Integer.parseInt(a);
a = br.readLine();
int k = Integer.parseInt(a);
studs.add(new Student(s, "C:\\Users\\Student\\Desktop\\res\\" + s + ".png", i, k));
}
} catch (FileNotFoundException fnf) {
System.out.println("FileNotFoundException: " + fnf);
} catch (IOException ex) {
System.out.println("IOException: " + ex);
}
}
public void addStud(String name, String compLit, String linux) {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\Users\\Student\\Desktop\\Marks.txt")), true);
out.write(name);
out.write(compLit);
out.write(linux);
} catch (IOException ex) {
System.out.println("IOException: " + ex);
}
}
}
//class for student accessor methods
public class Student {
private String name;
private int compLit;
private int linux;
private String photo;
public Student(String name, String photo, int compLit, int linux) {
this.name = name;
this.photo = photo;
this.compLit = compLit;
this.linux = linux;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getCompLit() {
return this.compLit;
}
public void setCompLit(int compLit) {
this.compLit = compLit;
}
public int getLinux() {
return this.linux;
}
public void setLinux(int linux) {
this.linux = linux;
}
public String getPhoto() {
return this.photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
}
//main GUI where it all happens
public class MainGUI extends javax.swing.JFrame {
String name;
int compLit;
int linux;
String photo;
private FileConnect file;
private Student stu;
public MainGUI() {
initComponents();
}
private void menuItemExitActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void menuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
Date now = new Date();
JOptionPane.showMessageDialog(this, "Author: Jean van der Walt \n " + now, "About" , JOptionPane.INFORMATION_MESSAGE);
}
**private void cbStudActionPerformed(java.awt.event.ActionEvent evt) {
//user selects item in combo box
//get all the info for the selected item
//display them
//I tried to do something with
//cbStud.getSelected..... but don't think that'll work
}**
**private void btnStudAddActionPerformed(java.awt.event.ActionEvent evt) {
file.addStud(tfStudName.getText(), tfStudCompLit.getText(), tfStudLinux.getText());
//get a Nullpointer exception HERE!!!
}**
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainGUI().setVisible(true);
}
});
}
- - - - &GT;我正在阅读的文本文件如下所示:
Anthony Braddock \ n 97 \ n 87 ......(另外7名学生) ----------------------------------&GT;
//整个GUI代码
import java.util.Date;
import javax.swing.JOptionPane;
public class MainGUI extends javax.swing.JFrame {
String name;
int compLit;
int linux;
String photo;
private FileConnect file = null;
private Student stu = null;
public MainGUI() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
lblHeading = new javax.swing.JLabel();
pnlSelectStud = new javax.swing.JPanel();
cbStud = new javax.swing.JComboBox();
pnlMarks = new javax.swing.JPanel();
lblCompLitMark = new javax.swing.JLabel();
lblLinuxMark = new javax.swing.JLabel();
lblCompLitDisplay = new javax.swing.JLabel();
lblLinuxDisplay = new javax.swing.JLabel();
pnlPhoto = new javax.swing.JPanel();
lblPic = new javax.swing.JLabel();
pnlAddStud = new javax.swing.JPanel();
lblStudName = new javax.swing.JLabel();
lblStudCompLit = new javax.swing.JLabel();
lblStudLinux = new javax.swing.JLabel();
tfStudName = new javax.swing.JTextField();
tfStudCompLit = new javax.swing.JTextField();
tfStudLinux = new javax.swing.JTextField();
btnStudAdd = new javax.swing.JButton();
menuBar = new javax.swing.JMenuBar();
menuFile = new javax.swing.JMenu();
menuItemExit = new javax.swing.JMenuItem();
menuEdit = new javax.swing.JMenu();
menuItemAbout = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
lblHeading.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
lblHeading.setText("Individual Student Marks");
pnlSelectStud.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Select Student", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N
cbStud.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Anthony Braddock", "Charl Fourie", "Darren Tiplady", "Jacobus Langenhoven", "Jaun Pierre Reyneke", "Johan van der Merwe", "Johannes Van Eck", "Lodewyk Duminy" }));
cbStud.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbStudActionPerformed(evt);
}
});
javax.swing.GroupLayout pnlSelectStudLayout = new javax.swing.GroupLayout(pnlSelectStud);
pnlSelectStud.setLayout(pnlSelectStudLayout);
pnlSelectStudLayout.setHorizontalGroup(
pnlSelectStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlSelectStudLayout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(cbStud, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(20, Short.MAX_VALUE))
);
pnlSelectStudLayout.setVerticalGroup(
pnlSelectStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlSelectStudLayout.createSequentialGroup()
.addGap(61, 61, 61)
.addComponent(cbStud, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(66, Short.MAX_VALUE))
);
pnlMarks.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Marks", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N
lblCompLitMark.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblCompLitMark.setText("Computer Literacy");
lblLinuxMark.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblLinuxMark.setText("Using Linux");
lblCompLitDisplay.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblCompLitDisplay.setText("UNKNOWN");
lblLinuxDisplay.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblLinuxDisplay.setText("UNKNOWN");
javax.swing.GroupLayout pnlMarksLayout = new javax.swing.GroupLayout(pnlMarks);
pnlMarks.setLayout(pnlMarksLayout);
pnlMarksLayout.setHorizontalGroup(
pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlMarksLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblCompLitMark)
.addComponent(lblLinuxMark))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 164, Short.MAX_VALUE)
.addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblCompLitDisplay)
.addComponent(lblLinuxDisplay))
.addGap(18, 18, 18))
);
pnlMarksLayout.setVerticalGroup(
pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlMarksLayout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblCompLitMark)
.addComponent(lblCompLitDisplay))
.addGap(37, 37, 37)
.addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblLinuxMark)
.addComponent(lblLinuxDisplay))
.addContainerGap(64, Short.MAX_VALUE))
);
pnlPhoto.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Photo", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N
javax.swing.GroupLayout pnlPhotoLayout = new javax.swing.GroupLayout(pnlPhoto);
pnlPhoto.setLayout(pnlPhotoLayout);
pnlPhotoLayout.setHorizontalGroup(
pnlPhotoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlPhotoLayout.createSequentialGroup()
.addGap(55, 55, 55)
.addComponent(lblPic, javax.swing.GroupLayout.PREFERRED_SIZE, 129, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(54, Short.MAX_VALUE))
);
pnlPhotoLayout.setVerticalGroup(
pnlPhotoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlPhotoLayout.createSequentialGroup()
.addGap(33, 33, 33)
.addComponent(lblPic, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(33, Short.MAX_VALUE))
);
pnlAddStud.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Add your name and marks", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N
lblStudName.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblStudName.setText("Name");
lblStudCompLit.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblStudCompLit.setText("Computer Literacy");
lblStudLinux.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblStudLinux.setText("Using Linux");
tfStudName.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
tfStudCompLit.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
tfStudLinux.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
btnStudAdd.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
btnStudAdd.setText("Add");
btnStudAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnStudAddActionPerformed(evt);
}
});
javax.swing.GroupLayout pnlAddStudLayout = new javax.swing.GroupLayout(pnlAddStud);
pnlAddStud.setLayout(pnlAddStudLayout);
pnlAddStudLayout.setHorizontalGroup(
pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlAddStudLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblStudName)
.addComponent(lblStudCompLit)
.addComponent(lblStudLinux))
.addGap(14, 14, 14)
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlAddStudLayout.createSequentialGroup()
.addGap(14, 14, 14)
.addComponent(tfStudName, javax.swing.GroupLayout.PREFERRED_SIZE, 222, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(pnlAddStudLayout.createSequentialGroup()
.addGap(166, 166, 166)
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(tfStudLinux, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(tfStudCompLit, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE)))))
.addComponent(btnStudAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 398, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pnlAddStudLayout.setVerticalGroup(
pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlAddStudLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblStudName)
.addComponent(tfStudName, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblStudCompLit)
.addComponent(tfStudCompLit, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblStudLinux)
.addComponent(tfStudLinux, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addComponent(btnStudAdd, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE))
);
menuFile.setText("File");
menuItemExit.setText("Exit");
menuItemExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuItemExitActionPerformed(evt);
}
});
menuFile.add(menuItemExit);
menuBar.add(menuFile);
menuEdit.setText("Edit");
menuItemAbout.setText("About");
menuItemAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuItemAboutActionPerformed(evt);
}
});
menuEdit.add(menuItemAbout);
menuBar.add(menuEdit);
setJMenuBar(menuBar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnlPhoto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlSelectStud, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnlMarks, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlAddStud, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(26, 26, 26))
.addGroup(layout.createSequentialGroup()
.addGap(216, 216, 216)
.addComponent(lblHeading)
.addContainerGap(250, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(lblHeading, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(pnlMarks, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlSelectStud, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(pnlAddStud, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlPhoto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(19, 19, 19))
);
pack();
}// </editor-fold>
private void menuItemExitActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void menuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
Date now = new Date();
JOptionPane.showMessageDialog(this, "Author: Jean van der Walt \n " + now, "About" , JOptionPane.INFORMATION_MESSAGE);
}
private void cbStudActionPerformed(java.awt.event.ActionEvent evt) {
//user selects item in combo box
//get all the info for the selected item
//display them
}
private void btnStudAddActionPerformed(java.awt.event.ActionEvent evt) {
file.addStud(tfStudName.getText(), tfStudCompLit.getText(), tfStudLinux.getText());
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainGUI().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnStudAdd;
private javax.swing.JComboBox cbStud;
private javax.swing.JLabel lblCompLitDisplay;
private javax.swing.JLabel lblCompLitMark;
private javax.swing.JLabel lblHeading;
private javax.swing.JLabel lblLinuxDisplay;
private javax.swing.JLabel lblLinuxMark;
private javax.swing.JLabel lblPic;
private javax.swing.JLabel lblStudCompLit;
private javax.swing.JLabel lblStudLinux;
private javax.swing.JLabel lblStudName;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenu menuEdit;
private javax.swing.JMenu menuFile;
private javax.swing.JMenuItem menuItemAbout;
private javax.swing.JMenuItem menuItemExit;
private javax.swing.JPanel pnlAddStud;
private javax.swing.JPanel pnlMarks;
private javax.swing.JPanel pnlPhoto;
private javax.swing.JPanel pnlSelectStud;
private javax.swing.JTextField tfStudCompLit;
private javax.swing.JTextField tfStudLinux;
private javax.swing.JTextField tfStudName;
// End of variables declaration//GEN-END:variables
}
答案 0 :(得分:0)
问题1.由于你似乎缺少一些gui代码,所以你有什么不清楚,但一般来说,我会存储一个Map<String, Student>
,它将每个“学生名”映射到他们的“学生实例”并在组合框选择时使用它来查找学生(假设您显示学生姓名并且名称是唯一的)。
问题2.您似乎没有初始化file
。