How do I change a JFreeChart's size
java, jfreechart, layout, sizing, swing
Solution
When you create your `ChartPanel`, you have several options that affect the result:
Accept the `DEFAULT_WIDTH` and `DEFAULT_HEIGHT`: 680 x 420.
Specify the preferred `width` and `height` in the constructor.
Invoke `setPreferredSize()` explicitly if appropriate.
Override `getPreferredSize()` to calculate the size dynamically.
@Override
public Dimension getPreferredSize() {
// given some values of w & h
return new Dimension(w, h);
}
Choose the layout of the container to which the `ChartPanel` will be added. Note that the default layout of `JPanel` is `FlowLayout`, while that of `JFrame` is `BorderLayout`. As a concrete example, `ThermometerDemo` uses both preferred values in the constructor and a `GridLayout` for the container to allow dynamic resizing.
Problem
I've added a `JFreeChart` to a `JPanel` (using a `BorderLayout`), and it's huge. Is there something I can do to make it smaller? ``` public void generateChart() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); //set the values of the chart for(int i=0; i<8; i++) { dataset.setValue(income_array[i], "Income", Double.toString(percent_array[i])); } JFreeChart chart = ChartFactory.createBarChart( "Required Annual Income for a Variety of Interest Rates", "Percent", "Income", dataset, PlotOrientation.VERTICAL, false,true, false); ChartPanel cp = new ChartPanel(chart); chart.setBackgroundPaint(Color.white); chart.getTitle().setPaint(Color.black); CategoryPlot p = chart.getCategoryPlot(); p.setRangeGridlinePaint(Color.blue); //cp.setMaximumDrawHeight(5); //cp.setMaximumDrawWidth(5); //cp.setZoomOutFactor(.1); JPanel graph = new JPanel(); graph.add(cp); middle.add(graph, BorderLayout.CENTER); } ```