-
-
Save briemla/a617d31d422e23b2a716ac74aa542ea6 to your computer and use it in GitHub Desktop.
HBox failing to layout ChartViewer instances from JFreeChartFX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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