Skip to content

Instantly share code, notes, and snippets.

@briemla
Last active December 19, 2017 11:35
Show Gist options
  • Save briemla/a617d31d422e23b2a716ac74aa542ea6 to your computer and use it in GitHub Desktop.
Save briemla/a617d31d422e23b2a716ac74aa542ea6 to your computer and use it in GitHub Desktop.
HBox failing to layout ChartViewer instances from JFreeChartFX
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.fx.ChartViewer;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HBoxFail extends Application {
private static final int numberOfCharts = 3;
private static final boolean useWorkaround = false;
private Pane charts() {
HBox parent = new HBox();
for (int current = 0; current < numberOfCharts; current++) {
ChartViewer viewer = createChart();
Node container = useWorkaround(viewer);
HBox.setHgrow(container, Priority.ALWAYS);
parent.getChildren().add(container);
}
return parent;
}
private Node useWorkaround(ChartViewer viewer) {
if (useWorkaround) {
return new StackPane(viewer);
}
return viewer;
}
@Override
public void start(Stage stage) throws Exception {
Pane charts = charts();
Scene value = new Scene(charts);
stage.setScene(value);
stage.setTitle("HBox fail");
stage.setWidth(700);
stage.setHeight(390);
stage.show();
}
public static void main(String[] args) {
launch(HBoxFail.class);
}
/**
* Taken from BarChartFXDemo1.java
*
* @return
*/
private static ChartViewer createChart() {
CategoryDataset dataset = createDataset();
JFreeChart chart = ChartFactory.createBarChart("Performance: JFreeSVG vs Batik",
null /* x-axis label */, "Milliseconds" /* y-axis label */, dataset);
chart.addSubtitle(new TextTitle(
"Time to generate 1000 charts in SVG " + "format (lower bars = better performance)"));
chart.setBackgroundPaint(Color.white);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);
chart.getLegend().setFrame(BlockBorder.NONE);
return wrapInViewer(chart);
}
private static ChartViewer wrapInViewer(JFreeChart chart) {
ChartViewer viewer = new ChartViewer(chart);
viewer.setMaxHeight(Double.MAX_VALUE);
viewer.setMaxWidth(Double.MAX_VALUE);
return viewer;
}
/**
* Taken from BarChartFXDemo1.java
*
* @return
*/
private static CategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(7445, "JFreeSVG", "Warm-up");
dataset.addValue(24448, "Batik", "Warm-up");
dataset.addValue(4297, "JFreeSVG", "Test");
dataset.addValue(21022, "Batik", "Test");
return dataset;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment