import java.awt.Color;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.fx.ChartViewer;
import org.jfree.chart.plot.flow.FlowPlot;
import org.jfree.data.flow.DefaultFlowDataset;
import org.jfree.data.flow.FlowDataset;
import org.jfree.data.flow.NodeKey;
/**
* FlowPlot example adapted from https://github.com/jfree/flowplot.git
*/
public class FlowPlotFXTest extends Application {
// Adapted from FlowPlotDemo1.java
private FlowDataset<String> createDataset() {
var dataset = new DefaultFlowDataset<String>();
dataset.setFlow(0, "A", "X", 4);
dataset.setFlow(0, "A", "Y", 2);
dataset.setFlow(0, "A", "Z", 1);
dataset.setFlow(0, "B", "X", 2);
dataset.setFlow(0, "B", "Y", 2);
dataset.setFlow(0, "B", "Z", 2);
dataset.setFlow(1, "X", "D", 3);
dataset.setFlow(1, "X", "E", 4);
dataset.setFlow(1, "Y", "D", 5);
dataset.setFlow(1, "Y", "E", 3);
dataset.setFlow(1, "Z", "D", 2);
dataset.setFlow(1, "Z", "E", 1);
dataset.setFlow(2, "D", "H", 2);
dataset.setFlow(2, "D", "I", 3);
dataset.setFlow(2, "D", "J", 0);
dataset.setFlow(2, "E", "H", 3);
dataset.setFlow(2, "E", "I", 2);
dataset.setFlow(2, "E", "J", 3);
return dataset;
}
private JFreeChart createChart(FlowDataset dataset) {
var plot = new FlowPlot(dataset);
plot.setBackgroundPaint(Color.BLACK);
plot.setDefaultNodeLabelPaint(Color.WHITE);
plot.setDefaultNodeColor(Color.CYAN.darker());
plot.setNodeFillColor(new NodeKey(1, "Y"), Color.MAGENTA);
//plot.setNodeColorSwatch(FlowColors.getDefaultColors());
var chart = new JFreeChart("FlowPlot FX Test", plot);
return chart;
}
public ChartViewer createViewer() {
var dataset = createDataset();
var chart = createChart(dataset);
var viewer = new ChartViewer(chart);
viewer.setPrefSize(768, 512);
return viewer;
}
@Override
public void start(Stage stage) throws Exception {
ChartViewer viewer = createViewer();
stage.setTitle(viewer.getChart().getTitle().getText());
stage.setScene(new Scene(viewer));
stage.show();
//viewer.getCanvas().getChart().fireChartChanged();
//viewer.getCanvas().chartChanged(null);
}
public static void main(String[] args) {
launch(args);
}
}