Você está na página 1de 3

import

import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import

java.awt.event.ItemEvent;
java.util.Iterator;
java.io.FileNotFoundException;
java.awt.Color;
java.util.Scanner;
java.io.File;
java.awt.event.ActionEvent;
java.awt.event.ItemListener;
java.awt.event.ActionListener;
javax.swing.BorderFactory;
java.awt.GridLayout;
java.awt.Component;
java.awt.LayoutManager;
java.awt.BorderLayout;
javax.swing.JPanel;
javax.swing.JComboBox;
javax.swing.JButton;
javax.swing.JTextField;
javax.swing.JLabel;
javax.swing.JFrame;

public class Main extends JFrame


{
private JLabel title;
private JTextField inputFile;
private JButton readButton;
private JLabel inputLabel;
private JLabel inputMessage;
private JLabel selectCity;
private JLabel selectState;
private JComboBox<City> cityCombo;
private JComboBox<State> stateCombo;
private JLabel distLabel;
private JLabel distInfo;
private JPanel leftPanel;
private JPanel rightPanel;
private JLabel numCitiesLabel;
private JLabel selectTimeLabel;
private JLabel lbl3;
private JLabel lbl4;
OrderedList<State> stateList;
public Main() {
title = new JLabel("Top 10 Cities from Each State", 0);
inputFile = new JTextField("CityData4.csv", 10);
readButton = new JButton("
Read
");
inputLabel = new JLabel("Input File", 0);
inputMessage = new JLabel("");
selectCity = new JLabel("Select City", 0);
selectState = new JLabel("Select State", 0);
distLabel = new JLabel("Distance to Fort Worth: ");
distInfo = new JLabel("");
leftPanel = new JPanel();
rightPanel = new JPanel();
numCitiesLabel = new JLabel(" ");
selectTimeLabel = new JLabel(" ");
lbl3 = new JLabel(" ");

lbl4 = new JLabel(" ");


stateList = new OrderedList<State>();
this.setTitle("Cities Linked List");
this.setDefaultCloseOperation(3);
this.setSize(380, 300);
this.setLayout(new BorderLayout());
this.add(this.title, "North");
cityCombo = new JComboBox<City>();
stateCombo = new JComboBox<State>();
leftPanel.setLayout(new GridLayout(8, 1));
leftPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
leftPanel.add(inputFile);
leftPanel.add(inputLabel);
leftPanel.add(lbl3);
leftPanel.add(stateCombo);
leftPanel.add(selectState);
leftPanel.add(numCitiesLabel);
leftPanel.add(distLabel);
rightPanel.setLayout(new GridLayout(8, 1));
rightPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
rightPanel.add(readButton);
rightPanel.add(inputMessage);
rightPanel.add(lbl4);
rightPanel.add(cityCombo);
rightPanel.add(selectCity);
rightPanel.add(selectTimeLabel);
rightPanel.add(distInfo);
this.add(this.leftPanel, "West");
this.add(this.rightPanel, "East");
readButton.addActionListener(new readListener());
cityCombo.addItemListener(new cityListener());
stateCombo.addItemListener(new stateListener());
this.setVisible(true);
}
public static void main(final String[] args) {
new Main();
}
private class readListener implements ActionListener
{
public void actionPerformed(final ActionEvent arg0) {
Scanner cityData = null;
int numZips = 0;
int numCities = 0;
try {
cityData = new Scanner(new File(inputFile.getText()));
}
catch (FileNotFoundException e) {
inputMessage.setForeground(Color.RED);
inputMessage.setText("File not found");
}
cityData.nextLine();
cityData.useDelimiter(",");
while (cityData.hasNext()) {
final int zip = cityData.nextInt();
final String cityName = cityData.next();
final String state = cityData.next();
final double lat = cityData.nextDouble();

final double lon = cityData.nextDouble();


final int time = cityData.nextInt();
final String restOfLine = cityData.nextLine();
final boolean yesDaylight = restOfLine.charAt(1) == '1';
State newState = new State(state);
newState = stateList.findOrAdd(newState);
City newCity = new City(zip, cityName, lat, lon, time, yesDaylig
ht);
newCity = newState.getCityList().findOrAdd(newCity);
newCity.incrementZipCodes();
++numZips;
}
inputMessage.setForeground(Color.GREEN);
inputMessage.setText(String.valueOf(numZips) + " Zip Codes");
final Iterator<State> stateIterator = stateList.iterator();
while (stateIterator.hasNext()) {
stateCombo.addItem(stateIterator.next());
}
}
}
private class cityListener implements ItemListener
{
public void itemStateChanged(ItemEvent e) {
final City selectedCity = (City)cityCombo.getSelectedItem();
if (selectedCity == null) {
distInfo.setText(" ");
return;
}
final int dist = (int)selectedCity.distanceToFortWorth();
distInfo.setText(String.valueOf(dist) + " Miles");
}
}
private class stateListener implements ItemListener
{
public void itemStateChanged(ItemEvent ie) {
cityCombo.removeAllItems();
final State selectedState = (State)stateCombo.getSelectedItem();
numCitiesLabel.setForeground(Color.BLUE);
numCitiesLabel.setText(String.valueOf(selectedState.getNumCities())
+ " Cities");
final long startTime = System.nanoTime();
final City[] cityArray = selectedState.getTop10Cities();
final long stopTime = System.nanoTime();
for (int i = 0; i < 10; ++i) {
cityCombo.addItem(cityArray[i]);
}
selectTimeLabel.setForeground(Color.BLUE);
selectTimeLabel.setText(String.valueOf(stopTime - startTime) + " Nan
oseconds");
}
}
}

Você também pode gostar