Let's say I take FixedDataAreaSizeDemo.java from sourceforge, change the dataarea size to something square(because it's a little bit easier to see what happens), and then try both
Code: Select all
frame.getContentPane().add(chartPanel);
and
Code: Select all
frame.getContentPane().add(scrollPane);
Code: Select all
frame.pack();
I use Sun Java 1.6.0_11 on XP SP3.
Just to be extra sure we talk about the same little app, here is the one I use:
Code: Select all
import java.awt.Dimension;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.Size2D;
public class Main {
public static void main(String[] args) {
double[][] values = new double[][]{{1,2,3,4,5},{10,15,8,37,23}};
DefaultXYDataset set = new DefaultXYDataset();
set.addSeries("Values",values);
BufferedImage image = new BufferedImage(400,800,BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2 = (Graphics2D)image.createGraphics();
JFreeChart chart = ChartFactory.createScatterPlot(
"Quadratic Demo","x","y",set,PlotOrientation.HORIZONTAL,true, true, false);
XYPlot plot = chart.getXYPlot();
plot.setUseFixedDataAreaSize(true);
plot.setFixedDataAreaSize(new Size2D(500,500));
chart.setUseFixedPlotAreaSize(true);
ChartPanel chartPanel = new ChartPanel(chart,true);
chartPanel.setUseChartSize(true);
Size2D chartSize = chart.getPreferredChartAreaSize(g2);
chartPanel.setPreferredSize(new Dimension((int)chartSize.getWidth(),(int)chartSize.getHeight()));
chartPanel.setSize(new Dimension((int)chartSize.getWidth(),(int)chartSize.getHeight()));
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().setPreferredSize(chartPanel.getPreferredSize());
scrollPane.setViewportView(chartPanel);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.getContentPane().add(chartPanel);
frame.getContentPane().add(scrollPane);
frame.pack();
frame.setVisible(true);
try{
Thread.sleep(4000);
}
catch(InterruptedException e){
}
save("small.png",chart);
System.out.println("Adding axis");
plot.setDomainAxis(1,new NumberAxis("Second Axis"));
frame.validate();
//frame.doLayout();
frame.pack();
//frame.setSize(chartPanel.getSize());
try{
Thread.sleep(4000);
}
catch(InterruptedException e){
}
System.out.println("Adding text title");
TextTitle big = new TextTitle("Long title in a big font",new Font("SansSerif",1,36));
big.setPosition(RectangleEdge.RIGHT);
chart.addSubtitle(big);
frame.validate();
frame.pack();
//frame.doLayout();
save("larger.png",chart);
try{
Thread.sleep(4000);
}
catch(InterruptedException e){
}
System.out.println("Adding 2nd text title");
TextTitle verybig = new TextTitle("Long title in a very big font",new Font("SansSerif",1,72));
chart.addSubtitle(verybig);
verybig.setPosition(RectangleEdge.BOTTOM);
frame.validate();
frame.pack();
//frame.doLayout();
//frame.setSize(chartPanel.getSize());
try{
Thread.sleep(4000);
}
catch(InterruptedException e){
}
save("even_larger.png",chart);
System.out.println("Adding 3rd text title");
TextTitle small = new TextTitle("An even longer title than the first one but with a smaller font",new Font("SansSerif",1,24));
small.setPosition(RectangleEdge.LEFT);
chart.addSubtitle(small);
frame.validate();
//frame.doLayout();
frame.pack();
//frame.setSize(chartPanel.getSize());
save("largest.png",chart);
}
private static void save(String name,JFreeChart chart){
BufferedImage image = new BufferedImage(400,800,BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2 = image.createGraphics();
int width = 100;
int height = 100;
ChartRenderingInfo info = new ChartRenderingInfo();
if(chart.getUseFixedPlotAreaSize()){
width = (int)(chart.getPreferredChartAreaSize(g2).getWidth());
height = (int)(chart.getPreferredChartAreaSize(g2).getHeight());
}
try{
ChartUtilities.saveChartAsPNG(new File(name),chart,width,height,info);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("Plot area "+ info.getPlotInfo().getPlotArea());
System.out.println("Data area "+ info.getPlotInfo().getDataArea());
}
}