0

以前に遭遇したことがなく、修正できないように見えるコードの問題に遭遇しました。基本的に、ユーザーが名前 (「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 では機能しない理由と、修正方法を知りたいです。

4

0 に答える 0