private void init() {	
		perfChartDataSet = new PerfChartDataSet();

		domain = new DateAxis("Time");		
		NumberAxis range = new NumberAxis("");		
		domain.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
		range.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
		domain.setLabelFont(new Font("SansSerif", Font.PLAIN, 13));
		range.setLabelFont(new Font("SansSerif", Font.PLAIN, 13));
		XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
		renderer.setSeriesPaint(0, Color.red);		
		XYPlot plot = new XYPlot(perfChartDataSet, domain, range, renderer);
		plot.setBackgroundPaint(Color.lightGray);
		plot.setDomainGridlinePaint(Color.white);
		plot.setRangeGridlinePaint(Color.white);
		plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
		domain.setAutoRange(true);
		domain.setLowerMargin(0.0);
		domain.setUpperMargin(0.0);
		domain.setTickLabelsVisible(true);

		range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());		
		JFreeChart chart = new JFreeChart("", new Font("SansSerif", Font.BOLD, 24), plot, true);
		chart.setBackgroundPaint(Color.white);
		chartView = new ChartPanel(chart);		
		chartView.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createEmptyBorder(4, 4, 4, 4),
				BorderFactory.createLineBorder(Color.BLACK)));

		tableModel = new PerfTableModel(perfLogData);
		tableView = new PerfTable();

		TableColumnModel columnModel = new DefaultTableColumnModel();

		//||Color||Group||Measurement||Samples||Minimum||Average||Maximum||Std. D||	

		TableColumn column = new TableColumn(0);
		column.setHeaderValue("");
		column.setResizable(false);
		column.setMinWidth(20);
		column.setMaxWidth(20);
		columnModel.addColumn(column);		

		column = new TableColumn(1);
		column.setHeaderValue("Group");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(1));
		columnModel.addColumn(column);

		column = new TableColumn(2);
		column.setHeaderValue("Measurement");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(2));
		columnModel.addColumn(column);

		column = new TableColumn(3);
		column.setHeaderValue("Samples");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(3));
		columnModel.addColumn(column);		

		column = new TableColumn(4);
		column.setHeaderValue("Minimum");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(4));
		columnModel.addColumn(column);

		column = new TableColumn(5);
		column.setHeaderValue("Average");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(5));
		columnModel.addColumn(column);

		column = new TableColumn(6);
		column.setHeaderValue("Maximum");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(6));
		columnModel.addColumn(column);

		column = new TableColumn(7);
		column.setHeaderValue("Std. Deviation");
		column.setPreferredWidth(PrefManager.get().getTableViewColumnSize(7));
		columnModel.addColumn(column);

		tableView.setModel(tableModel);
		tableView.setColumnModel(columnModel);

		Comparator<CounterValue> counterValueComparator = new Comparator<CounterValue>() {

			@Override
			public int compare(CounterValue arg0, CounterValue arg1) {
				if (arg0.getDoubleValue() > arg1.getDoubleValue()) {
					return 1;
				}
				if (arg0.getDoubleValue() < arg1.getDoubleValue()) {
					return -1;
				}
				return 0;
			}

		};

		TableRowSorter<PerfTableModel> sorter = new TableRowSorter<PerfTableModel>(tableModel);
		sorter.setComparator(3, counterValueComparator);
		sorter.setComparator(4, counterValueComparator);
		sorter.setComparator(5, counterValueComparator);
		sorter.setComparator(6, counterValueComparator);
		sorter.setComparator(7, counterValueComparator);

		tableView.setRowSorter(sorter);		
		tableView.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);		
		tableView.getSelectionModel().addListSelectionListener(this);

		JScrollPane scrollPane = new JScrollPane(tableView);

		previewComponent = new PreviewComponent(filterManager, this);

		//Add the scroll panes to a split pane.
		bottomSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		bottomSplitPane.setLeftComponent(scrollPane);
		bottomSplitPane.setRightComponent(previewComponent);
		bottomSplitPane.setDividerSize(DIVIDER_SIZE);
		bottomSplitPane.setContinuousLayout(true);
		bottomSplitPane.setDividerLocation(PrefManager.get().getBottomDividerPos());

		splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
		splitPane.setBottomComponent(bottomSplitPane);
		splitPane.setTopComponent(chartView);
		splitPane.setDividerSize(DIVIDER_SIZE);
		splitPane.setContinuousLayout(true);
		splitPane.setDividerLocation(PrefManager.get().getDividerPos());

		add(splitPane, BorderLayout.CENTER);

		MainMenu mainMenu = new MainMenu(this);
		//frame.setJMenuBar(mainMenu);
		add(mainMenu.getToolBar(), BorderLayout.NORTH);

		statusBar = new StatusBar(true);
		add(statusBar, BorderLayout.SOUTH);

		fc = new JFileChooser();
		fc.setMultiSelectionEnabled(true);
		fc.setFileFilter(new FileFilter() {

			@Override
			public boolean accept(File f) {
				if (f.isDirectory()) {   
					return true;
				}

				String extension = FileUtils.getExtension(f); 
				if (extension != null) {
					if (extension.equals(FileUtils.CSV_TYPE)) {
						return true;            
					} 					
				}
				return false;
			}
			@Override
			public String getDescription() {				
				return "Comma Separated Value Files (*.csv)";
			}

		});

		setDropTarget(new DropTarget() {
			private static final long serialVersionUID = 1L;

			public synchronized void drop(DropTargetDropEvent evt) {
				try {
					evt.acceptDrop(DnDConstants.ACTION_COPY);

					@SuppressWarnings("unchecked")
					List<File> droppedFiles = (List<File>)evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);

					addFiles(droppedFiles.toArray(new File[0]));
					//for (File file : droppedFiles) {
					//	statusBar.setInfoText(file.getName());
					//}
				} catch (Exception ex) {
					String msg = ex.getMessage();
					if (msg != null && msg.length() > 40) {
						msg = msg.substring(0, 40);
					}
					if (msg != null) {
						JOptionPane.showMessageDialog(frame,
								msg,
								"Error",
								JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
	}