以前に遭遇したことがなく、修正できないように見えるコードの問題に遭遇しました。基本的に、ユーザーが名前 (「Ryan」など) を検索できるようにし、CSV ファイルを検索して結果を JScrollPane(JList) に表示する GUI アプリケーションを作成しようとしています。以下は、私がこれまでに持っているコードです。示されているように、Vector の最後の要素を n 回繰り返してリストに入力します (これは間違っています。Vector の各要素は 1 回出力する必要があります)...
メインコード:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;
public class SeatingChart extends JPanel implements MouseListener {
static JLabel search = new JLabel("Search for: ");
static JTextField se = new JTextField("Cap 1st Letter Of Name", 15);
static JButton submit = new JButton("submit");
Vector<Employee> employees = new Vector<Employee>(5, 1); //Works fine with Vector< String >
JList results = new JList(employees);
JScrollPane display = new JScrollPane(results);
public SeatingChart()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
//Add things to Panels
JPanel north = new JPanel();
north.add(search);
north.add(se);
north.add(submit);
JPanel west = new JPanel();
west.add(display);
//Add panels to Frame
panel.add(north, BorderLayout.NORTH);
panel.add(west, BorderLayout.WEST);
add(panel);
// Register listeners
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
search(se.getText()); //call search and sort method
results.setListData(employees);
}});
results.addMouseListener(this);
addMouseListener(this);
} //end constructor
public void search(String s)
{
try{
BufferedReader CSVFile = new BufferedReader(new FileReader("ADexport.csv"));
String dataRow = CSVFile.readLine(); // Read first line.
// The while checks to see if the file is empty
while (dataRow != null)
{
if(dataRow.contains(s)) { //Line by line
String[] dataArray = dataRow.split(",");
employees.addElement(new Employee(dataArray[0], dataArray[1], dataArray[2], dataArray[3])); //Add .toString() if Vector< String >
} //end if
dataRow = CSVFile.readLine(); /*Read next line*/
}
CSVFile.close();
}
catch (Exception e)
{
System.out.println("Unexpected error.");
System.out.println("Error: " + e);
}
} //end search method
public void mouseClicked(MouseEvent arg0) {
int index = results.getSelectedIndex();
Employee selected = (Employee) results.getSelectedValue();
System.out.println("Clicked! " + index);
}
従業員クラス:
import java.util.Vector;
public class Employee {
public static String name;
public static String type;
public static String pos;
public static String ex;
public Employee(String n, String t, String p, String e)
{
name = n;
type = t;
pos = p;
ex = e;
}
public String toString()
{
return this.name + " " + this.ex;
}
public String getName()
{
return this.name;
}
public String getex()
{
return this.ex;
}
}
そして、これが私が使用しているCSVファイルからの情報です:
Name Type Description Office
Ryan Cole User Manager Ext. 115
Ryan Ketricks User Staff Ext. 116
Ryan James User Senior Ext. 117
Luke Alexander User Staff Ext. 118
Michael Kale User Senior Ext. 119
Alyssa Win User Staff Ext. 120
Kayla Bofort User Partner Ext. 121
問題は、Vector < String > を使用するとすべて正常に動作しますが、String から Employee にキャストできないことです。MouseEvent がトリガーされたときにその情報を再度使用したいので、とにかく Employee タイプを保持したいと思います。基本的に、String では機能するのに Employee では機能しない理由と、修正方法を知りたいです。