User Tools

Site Tools


zalozeni:grafika:experimenttabs:graf

Graf

Graf je zpravidla vykreslovan ve vice castech (hlavni graf ve specialni zalozce, graf v GenericCell, graf vytvoreny pro export do protokolu). Proto doporucuji vytvorit specialni tridu pro vytvareni grafu.

Osvedcilo se mi definovat promennou NUM_GRAPH_SERIES, ktera udava, kolik serii graf obsahuje (jednoducha kontrola, zda je treba serie vytvorit, nebo zda vytvoreny uz jsou)

Jsou zde 3 promenne, ktere se predavaji v constructoru. pane je AnchorPane, do ktere se graf vklada (druhy constructor tento parametr nema - vytvoreny graf slouzi pro export). Dale doporucuji predat si instanceSS (nastaveni minima, nastaveni serii v zavislosti na tom, jake kanaly byly pri mereni pouzity). Parametr isTiny rozlisuje, zda je graf zobrazen velky (napr. graf v tabu, nebo protokolu) nebo maly (graf v GenerciCell).

Zbytku aplikace jsou vysvicene pouze metody repaint(dataService), insertDataRow(dataRow) a getChart()

public class DokuwikiGraph {
 
	private final static int NUM_GRAPH_SERIES = 2;
 
	private AnchorPane pane;
	private LineChart<Number, Number> chart;
	private boolean isTiny;
 
	DokuwikiExpInstanceSettignsService instanceSS;
 
	public DokuwikiGraph(AnchorPane pane, DokuwikiExpInstanceSettignsService instanceSS, boolean isTiny) {
		this.pane = pane;
		this.instanceSS = instanceSS;
		this.isTiny = isTiny;
 
		createGraph();
	}
 
	public void repaint(DokuwikiDataService dataService) {
		clearGraphSeries();
		checkGraphSeries();
 
		List<DokuwikiDataRow> dataRows = dataService.getDataRows();
		if (dataRows == null || dataRows.isEmpty()) {
			return;
		}
 
		for (DokuwikiDataRow dr : dataRows) {
			insertDataRow(dr);
		}
	}
 
	public void insertDataRow(DokuwikiDataRow dr) {
		checkGraphSeries();
 
		chart.getData().get(0).getData().add(new Data<Number, Number>(dr.getTime(), dr.getValue1()));
		chart.getData().get(1).getData().add(new Data<Number, Number>(dr.getTime(), dr.getValue2()));
	}
 
	private void createGraph() {
		NumberAxis xAxis = new NumberAxis();
		xAxis.setLowerBound(0);
		if (isTiny) {
			xAxis.setTickUnit(1);
		} else {
			xAxis.setTickUnit(5);
		}
 
		chart = new LineChart<Number, Number>(xAxis, new NumberAxis());
		chart.setAnimated(false);
		chart.getStylesheets().add(getClass().getResource("chart-style.css").toExternalForm());
 
		if (this.pane != null) {
			AnchorPaneHelper.insertNodeToContent(chart, pane);
		}
	}
 
	private void checkGraphSeries() {
		if (chart.getData().size() == NUM_GRAPH_SERIES)
			return;
 
		clearGraphSeries();
 
		XYChart.Series<Number, Number> series1 = new XYChart.Series<Number, Number>();
		chart.getData().add(series1);
		XYChart.Series<Number, Number> series2 = new XYChart.Series<Number, Number>();
		chart.getData().add(series2);
	}
 
	private void clearGraphSeries() {
		chart.getData().clear();		
	}
 
	public LineChart<Number, Number> getChart() {
		return chart;
	}
 
}
zalozeni/grafika/experimenttabs/graf.txt · Last modified: 2016/07/25 13:48 by jlochman