0

文字列配列から Java awt リストを作成しようとしています。文字列配列は、.csv ファイルから値を取得します。(タイムゾーン) 例: オーストラリア、オーストラリアのメルボルン、ヨーロッパのシドニー、ロンドン

注: 2 つのリスト ボックスがあります。1 つ目は地域用、2 つ目は都市用です。アイデアは、ユーザーが最初のもので地域を選択した後、2 番目のものを更新することです。

これらの値からリストを作成できないようです

どんな助けでも感謝しますありがとう

String fileName = "C:\\Users\\Seb\\IdeaProjects\\TimeMachine\\src\\regions.csv";
    File file = new File(fileName);
    try {
        Scanner inputStream = new Scanner(file);
        inputStream.useDelimiter(System.getProperty("line.separator")); //Stops the white spaces creating a new entry in array
        while (inputStream.hasNext()) {
            String data = inputStream.next(); //gets the whole line
            String[] arrayLocations = data.split(",");
            System.out.println(arrayLocations[0]);
            System.out.println(arrayLocations[1]);

            listRegion = Arrays.asList(arrayLocations);
        }
        inputStream.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();

エラーが表示されますlistRegion = Arrays.asList(arrayLocations);

コード全体

import java.applet.Applet;
import java.awt.*;
import java.awt.List;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class TimeMachine extends Applet
{
private List listRegion = new List();
private List listSubRegion = new List();

public void init ()
{
    setLayout(new BorderLayout());

    Panel buttons = new Panel(new BorderLayout());
    buttons.setBackground(Color.cyan);
    buttons.add(listRegion, BorderLayout.WEST);
    buttons.add(listSubRegion, BorderLayout.CENTER);
    add(buttons, BorderLayout.NORTH);
}

public void getLocationInfo()
{
    String fileName = "C:\\Users\\Seb\\IdeaProjects\\TimeMachine\\src\\regions.csv";
    File file = new File(fileName);
    try {
        Scanner inputStream = new Scanner(file);
        inputStream.useDelimiter(System.getProperty("line.separator")); //Stops the white spaces creating a new entry in array
        while (inputStream.hasNext()) {
            String data = inputStream.next(); //gets the whole line
            String[] arrayLocations = data.split(",");
            System.out.println(arrayLocations[0]);
            System.out.println(arrayLocations[1]);

            listRegion = Arrays.asList(arrayLocations);
        }
        inputStream.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

}

4

1 に答える 1

1

と の両方java.util.Listを混合しています。java.awt.Listのみを使用しますjava.awt.List

listRegion = new List();
 while (inputStream.hasNext()) {
            String data = inputStream.next(); //gets the whole line
            String[] arrayLocations = data.split(",");
            System.out.println(arrayLocations[0]);
            System.out.println(arrayLocations[1]);
            for(String location : arrayLocations)
                 listRegion.add(location);
        }

より正式には、以下は、重複が処理される REGION,COUNTRY 形式を region.csv に含める必要がある作業コードです。

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.List;
import java.awt.Panel;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class TimeMachine extends Applet implements ItemListener{
    private static final long serialVersionUID = 1L;

    private List listRegion = new List();
    private List listSubRegion = new List();
    private Map<String, Set<String>> regionCountryMap = new HashMap<String, Set<String>>();

    public void init()
    {
        setLayout(new BorderLayout());

        getLocationInfo();
        Panel buttons = new Panel(new BorderLayout());
        buttons.setBackground(Color.cyan);
        buttons.add(listRegion, BorderLayout.WEST);
        buttons.add(listSubRegion, BorderLayout.CENTER);
        add(buttons, BorderLayout.NORTH);
    }

    private void getLocationInfo() {
        String fileName = "e:\\regions.csv";
        File file = new File(fileName);
        try {
            Scanner inputStream = new Scanner(file);
            inputStream.useDelimiter(System.getProperty("line.separator"));
            listRegion = new List();
            while (inputStream.hasNext())
            {
                String data = inputStream.next(); // gets the whole line
                String[] arrayLocations = data.split(",");
                if(arrayLocations.length != 2){
                    System.out.println("Invalid entry in file : "+ Arrays.toString(arrayLocations));
                    continue;
                }
                String region = arrayLocations[0];
                if(!regionCountryMap.containsKey(region))
                {
                    listRegion.add(region);
                    regionCountryMap.put(region, new HashSet<String>());
                }
                regionCountryMap.get(region).add(arrayLocations[1]);//Set handles duplicates as well
            }
            inputStream.close();
            System.out.println("Region, Country list has been parsed successfully");
            listRegion.addItemListener(this);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        Set<String> countries = regionCountryMap.get(listRegion.getSelectedItem());
        listSubRegion.removeAll();
        for(String country : countries) {
            listSubRegion.add(country);
        }
        listSubRegion.validate();
        listSubRegion.repaint();
    }
}
于 2013-05-20T13:28:06.553 に答える